分享

【思唯网络】深度理解网络传输层TCP、UDP

 新用户16501297 2022-02-11
点个'赞'再走吧~
01
TCP协议
图片

1. TCP协议

TCP协议是一种面向连接的协议,可提供可靠的传输服务

2. TCP的端口号

作用:用来区分不同的网络服务

端口的分类:知名端口和动态端口

知名端口:0-1023,常见应用程序会使用的端口

动态端口:1024-65535,一般作为源端口使用

端口号对应的协议

图片

3. TCP头部

图片

整个TCP头部一共20个字节

Source Port:源端

Destination Port:目的端口

Sequence Number:顺序号码

Acknowledge Number:确认号码

Header Length;报头长度

Resv:保留字段

SYN:表示建立连接

ACK:表示响应

Window:窗口,用于流量控制

Checksum:校验字段

位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)

4. TCP三次握手

图片

第一次握手:主机A发送位码为syn=1(表示要求建立连接),随机产生seq number的数据包到主机B

第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq 1),同时syn=1,ack=1,随机产生一个seq number的数据包发送给A

第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number 1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq 1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功

5. TCP的传输过程

上图给出了主机A分2次(分2个数据包)向主机B传递200字节的过程。首先,主机A通过1个数据包发送100个字节的数据,数据包的 Seq 号设置为 1200。主机B为了确认这一点,向主机A发送 ACK 包,并将 Ack 号设置为 1301

为了保证数据准确到达,目标机器在收到数据包(包括SYN包、FIN包、普通数据包等)包后必须立即回传ACK包,这样发送方才能确认数据传输成功。

此时 Ack 号为 1301 而不是 1201,原因在于 Ack 号增加了传输数据的字节数。假设每次 Ack 号不加传输的字节数,这样虽然可以确认数据包的传输,但无法明确100字节全部正确传递还是丢失了一部分,比如只传递了80字节。

因此按如下的公式确认 Ack 号:seq 传递的字节数 1

6、TCP的流量控制

图片

接收端将自己可以接收的缓冲区大小放入 TCP 首部中的 “窗口大小” 字段, 通过ACK端通知发送端;窗口大小字段越大, 说明网络的吞吐量越高 接收端一旦发现自己的缓冲区快满了, 就会将窗口大小设置成一个更小的值通知给发送端;发送端接受到这个窗口之后, 就会减慢自己的发送速度

如果接收端缓冲区满了, 就会将窗口置为0; 这时发送方不再发送数据, 但是需要定期发送一个窗口探测数据段, 来查看接收端是否有窗口有容量来接收数据

7. TCP的关闭连接

图片

TCP的连接的拆除需要发送四个包,因此称为四次挥手

由于TCP连接是全双工的,因此每个方向都必须单独进行关闭

TCP的四次挥手

(1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。(2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。

(3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A。(4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。

图片
02    UCP的协议
图片

1. UDP协议

DUP协议是一种面向无连接的协议,传输可靠性没有保障

2. UDP头部

图片

UDP头部共8个字节,传输数据时没有确认机制

Source Port:源端口

Destination Port:目的端口

Header;报头长度

Checksum:校验字段

图片

图片

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多