• 计算机网络知识


    计算机网络英语:computer network),通常也简称网络,是利用通信设备和线路将地理位置不同的、功能独立的多个计算机系统连接起来,以功能完善的网络软件实现网络的硬件软件及资源共享信息传递的系统。简单的说即连接两台或多台计算机进行通信的系统。

    网络应用是计算机网络存在的理由,如果我们不使用任何应用,也就没有任何必要去设计它们的网络协议了。

    开放系统互连基本参考模型, 只要遵守这个OSI标准, 任何两个系统都能进行通信. OSI是七层协议体系结构, 而TCP/IP是一个四层协议体系结构, 于是我们采取折中的方法, 学习计算机网络原理的时候往往用的是五层协议的体系结构 : 物理层, 数据链路层, 网络层, 传输层和应用层。

    物理层

    计算机的世界里只有0和1, 正如你现在所看这篇文章的文字, 存储在计算机中也是一大串0和1的组合. 但是这些数字不能在真实的物理介质中传输的, 而需要把它转换为光信号或者电信号, 所以这一层负责将这些比特流(0101)与光电信号进行转换.

    如果没有物理层, 那么也就不存在互联网, 不存在数据的共享, 因为数据无法在网络中流动.


    数据链路层

    数据在这一层不再是以比特流的形式传输, 而是分割成一个一个的帧再进行传输.

    网络层

    如果只有数据链路层没有网络层, 数据就只能在同一条链路上传输, 不能跨链路传输. 有了网络层, 数据便能跨域不同的数据链路传输.

    IP地址

    IP地址又称为软件地址, 存储在计算机的存储器上, IPv4地址为32位, IPv6地址为128位

    IP地址和MAC地址
    • 网络层以上使用IP地址, 数据链路层以下使用MAC地址
    • IP地址是逻辑地址, MAC地址是物理地址
    • IP分组中首部的源地址和目的地址在传输中不会改变, MAC帧中首部的源地址和目的地址每到一个路由器会改变一次

    IP地址分类

    IP地址 = {<网络号>, <主机号>}

    A类地址 : 0.0.0.0 ~ 127.0.0.0
    B类地址 : 128.0.0.0 ~ 191.255.0.0
    C类地址 : 192.0.0.0 ~ 223.255.255.0

    划分子网之后的IP地址

    IP地址 = {<网络号>, <子网号>, <主机号>}

    例如某单位拥有一个B类IP地址, 145.13.0.0, 但凡目的地址为145.13.x.x的数据报都会被送到这个网络上的路由器R. 内部划分子网后变成 : 145.13.3.0, 145.13.7.0, 145.13.21.0. 但是对外仍表现为一个网络, 即145.13.0.0. 这样路由器R收到报文后, 再根据目的地址发到对应的子网上.

    子网掩码

    一般由一串1和一串0组成, 不管网络有没有划分子网, 将子网掩码和IP地址做按位与运算即可得出网络地址.

    所有的网络都必须使用子网掩码, 同时在路由表中必须有子网掩码这一栏. 如果一个网络不划分子网, 那么该网络的子网掩码就是默认的子网掩码.
    A类地址的默认子网掩码为255.0.0.0
    B类地址的默认子网掩码为255.255.0.0
    C类地址的默认子网掩码为255.255.255.0

    尽管划分子网增加了灵活性, 但是却减少了能够连接在网络上的主机总数.

     

    传输层

    这一层是重中之重, 因为数据链路层, 网络层这两层的数据传输都是不可靠的, 尽最大能力交付的. 什么意思的? 就是它们不负责提交给你的就是正确的数据. 然而这一层的TCP协议将要提供可靠传输

    这一层主要重点是两个协议 : 因特网(TCP/IP网络)上的应用使用了两个运输层协议:UDP和TCP。

    为什么Tcp协议需要三次握手建立连接?

    TCP作为一种可靠传输控制协议,其核心思想:既要保证数据可靠传输,又要提高传输的效率,而用三次恰恰可以满足以上两方面的需求!

    TCP可靠传输的精髓:TCP连接的一方A,由操作系统动态随机选取一个32位长的序列号(Initial Sequence Number),假设A的初始序列号为1000,以该序列号为原点,对自己将要发送的每个字节的数据进行编号,1001,1002,1003…,并把自己的初始序列号ISN告诉B,让B有一个思想准备,什么样编号的数据是合法的,什么编号是非法的,比如编号900就是非法的,同时B还可以对A每一个编号的字节数据进行确认。如果A收到B确认编号为2001,则意味着字节编号为1001-2000,共1000个字节已经安全到达。

    同理B也是类似的操作,假设B的初始序列号ISN为2000,以该序列号为原点,对自己将要发送的每个字节的数据进行编号,2001,2002,2003…,并把自己的初始序列号ISN告诉A,以便A可以确认B发送的每一个字节。如果B收到A确认编号为4001,则意味着字节编号为2001-4000,共2000个字节已经安全到达。 

    一句话总结就是:双方都需要确认对方收到了自己的序列号。也就是为了检测双方的发送和接收能力是否正常。

    为什么Tcp协议需要四次挥手断开连接?

    首先, 由于TCP的全双工通信, 双方都能作为数据发送方. A想要关闭连接, 必须要等数据都发送完毕, 才发送FIN给B. (此时A处于半关闭状态)
    然后, B发送确认ACK, 并且B此时如果要发送数据, 就发送(例如做一些释放前的处理)
    再者, B发送完数据之后, 发送FIN给A. (此时B处于半关闭状态)
    然后, A发送ACK, 进入TIME-WAIT状态
    最后, 经过2MSL时间后没有收到B传来的报文, 则确定B收到了ACK了. (此时A, B才算是处于完全关闭状态)

    应用层

    应用层协议最著名的就是HTTP, FTP了, 还有一个重要的DNS

    域名系统(DNS, Domain Name System)

    DNS 能将域名(例如, www.jianshu.com)解析成IP地址.

    域名服务器分类

    • 根域名服务器 : 最高层次的域名服务器
    • 顶级域名服务器 : 如其名
    • 权限域名服务器 : 负责一个区的应服务器
    • 本地域名服务器 : 主机发送DNS查询请求就是发给它

    URL

    URL的格式 : <协议>://<主机>:<端口>/<路径>, 端口和路径有时可省略.

    使用HTTP协议的URL : http://<主机>:<端口>/<路径>, HTTP默认端口号是80

    HTTP协议

    HTTP是面向事务的, 即它传输的数据是一个整体, 要么全部收到, 要么全部收不到.


    HTTPS协议


    HTTPS协议在HTTP协议的基础上, 在HTTP和TCP中间加入了一层SSL/TLS加密层, 解决了HTTP不安全的问题: 冒充, 篡改, 窃听三大风险.

     

     
     
  • 相关阅读:
    typescript中的类型兼容性
    typescript中使用泛型
    分数的乘法逆元和负数的取模运算
    pip2 install protobuf==2.6.1
    git使用代理
    Mount error(5):Input/output error on mount
    cmake 学习笔记(一)
    cmake --help
    ImportError: dynamic module does not define init function (initcaffe)
    docker
  • 原文地址:https://www.cnblogs.com/pzyin/p/9005180.html
Copyright © 2020-2023  润新知