• 计算机网络必备知识


    计算机网络体系基础概念

    分层模型/OSI模型

    • 物理层——双绞线,光纤,调制解调器(模拟信号与数字信号的转换
    • 数据链路层——数据校验,定义了网络传输的基本单位——帧,ARP协议
    • 网络层——定义网络,实现两台机器点到点的传输(IP数据报),IP协议,ICMP
    • 传输层——两台主机中的进程之间传输数据(端到端),TCP,UDP,(报文段,用户数据报)
    • 应用层——为客户提供各种应用服务,ftp,ssh

    路由器:连接两个不同网段的桥梁

    网络应用程序设计模式

    • C/S模式:Client/Server模式,需要在通讯两端各自部署客户机和服务器来完成数据通信;
      优点:可以安装在本地,可以缓存数据,协议选择灵活
      缺点:客户端也需要开发,开发周期长
    • B/S模式:Browser/Server模式,只需在一端部署服务器,另一台都是客户端即可完成传输
      优点:只需要开发服务端即可,剩下的都是通过浏览器使用http协议访问
      缺点:协议选择受限,不能缓存数据

    MTU:Maximum Transmission Unit,最大传输单元。某一层上面所能通过的最大数据包大小,以字节为单位。

    以太网帧格式
    以太网帧格式

    ARP协议:通过对方的IP地址获取MAC地址
    具体实现:每个主机都有ARP缓存,存有本局域网上的各IP和MAC映射,如果缓存里面没有找到,那么
    1、主机A的ARP进程在本局域网进行广播,“我的IP地址是:xx.xx.xx.xx,MAC地址是:xx:xx:xx:xx:xx:xx,我想知道IP地址为yy.yy.yy.yy的MAC地址”;
    2、本局域网的所有主机都会收到ARP请求;
    3、如果主机B的IP地址与ARP请求的IP地址一致,就收下这个请求,并向主机A发送响应,同时将自己的MAC地址写入到响应中,其它主机的IP地址与请求的IP不一致,则不做处理;
    4、主机A收到主机B的响应后,就将主机B的IP和MAC映射写到了自己的ARP缓存中;同时主机B将主机A的IP和MAC映射写到了自己的缓存中;

    IP数据报格式
    IP数据报格式

    • 协议版本:ipv4,ipv6
    • 16位总长度:首部和数据部分总长度,65535
    • 8位生存时间TTL(Time To Live)(网络连接下一跳的次数):一跳就是网络中经过一个节点,超过这个节点,包就被丢弃了,防止网络拥塞
    • 8位协议:区分上层使用的是什么协议(TCP,UDP)
    • 16位首部校验:只校验IP数据首部,数据校验由更高层协议校验
    • 32位源IP地址:4字节IP地址,点分十进制最大255
    • 32位目的IP地址:4字节IP地址,点分十进制最大255

    UDP数据报格式
    面向无连接的不安全的不可靠数据报传输(数据报不能分开)
    传输效率高,比如收发短信
    UDP数据报格式
    通过IP地址来确定网络环境中唯一的一台主机
    主机上使用端口号来区分不同的应用程序, vim /etc/services查看已经绑定的端口号
    IP+端口号唯一确定一台主机上的一个应用程序

    TCP数据报文段格式
    面向连接的安全的可靠的数据流传输协议
    丢包重传、序号和确认序号、滑动窗口
    TCP数据报文段格式

    • 32位序号:在一个TCP连接中传送的字节流中的每一个字节都按顺序编号,整个要传送的字节流的起始序号必须在连接建立时设置
    • 32位确认序号:是期望收到对方下一个报文段的第一个数据字节的序号。
      若确认号=N,则表明:到序号N-1为止的所有数据都已正确收到
    • ACK:确认ACKnowledgment
    • SYN:在连接建立时用来同步序号,SYN=1而ACK=0表示这是一个连接请求报文段
    • FIN:用来释放一个连接
    • 16位窗口大小:主要进行流量控制,发送发和接收方速率不匹配时,需要设置,主要是指接收方告诉发送发我还有多少缓存。
      窗口字段指明了现在允许对方发送的数据量,窗口值动态变化着

    三次握手和四次挥手
    三次握手和四次挥手
    mss 表示告诉对方我这边一次最多接收可以接收多少数据

    注意:

    1. SYN和FIN本身也会占一位
    2. 三次握手和四次挥手的过程都是在内核实现的

    TCP状态图
    TCP状态图
    TIME_WAIT出现在主动断开连接的一方。

    socket_pair
    客户端和服务端连接其实是一个连接对,创建socket相当于是创建了两个缓冲区:读缓冲区和写缓冲区。客户端的写缓冲区和服务端的读缓冲区是一对,客户端的读缓冲区和服务端的写缓冲区是一对。

    半关闭状态
    处于办关闭状态的时候,可以接受数据,但是不能发送数据,相当于把文件描述符的写缓冲区关闭了,半关闭一定是出现在主动关闭的一方。

    滑动窗口
    主要作用:进行流量控制
    如果发送端发送的速度较快,接收端接收到数据后处理较慢,而接收端缓冲区的大小是固定的,就会导致缓冲区满而丢失数据。TCP协议通过“滑动窗口”机制解决这一问题。

    在客户端给服务器发包的时候,不一定非要等到服务器返回响应包,由于客户端知道服务端的窗口大小,所以可以持续多次发送,当发送数据达到对方窗口大小了就不再发送,需要等对方进行处理,对方处理后就可以继续发送。

    粘包
    什么是粘包?
    对方发送数据连续发了两次,然后读数据的时候第一次没有读完,剩余的数据在第二次读走了,这种情况就属于粘包。

    解决方法:

    1. 报头加数据,在报头部分加要接收的数据长度,00100123456789,0010四个字节表示数据长度是10,要接收10个长度
    2. 添加结尾标志,但需一个一个判断是否是结束标志
    3. 数据包定长,发送方每次都发一定的长度

    心跳包
    心跳包用于检查与对方网络的连接是否正常。
    发送心跳过程:
    服务A给B发送心跳数据(定义好的数据串),服务B收到心跳数据后,给A回复相应的数据,此时A收到B的回复后认为连接正常。假如A连续发了多次后,仍然没有收到B的回复,则认为连接异常,需要重建连接(先close原来的连接,再重新connect)。
    长连接:连接建立好之后,一直保持连接不关闭
    短连接:连接使用完之后就立刻关闭

  • 相关阅读:
    Java设计模式-中介者模式
    Unity UGUI 绘制优雅的线段
    【2. 操作系统—中断、异常、系统调用】
    etcd实现大规模服务治理应用实战
    5.3 Web服务器简介及HTTP协议
    MySQL 增删改查(进阶)
    java126-throw向上抛出异常
    无限连接:前端跨页面通信的实现与应用
    @Transactional 注解使用详解
    java正则表达式
  • 原文地址:https://blog.csdn.net/weixin_45298607/article/details/125325377