传输层协议

发布时间 2023-10-22 19:16:15作者: 一个低调的wy


传输层协议

1. TCP、UDP的特性

1.1 TCP的特性

面向连接

提供全双工服务

半关闭(四次挥手)

错误检查

将数据打包成段,排序(分片)

确认机制

数据恢复,重传

流量控制,滑动窗口

1.2 UDP的特性

工作在传输层

面向无连接

提供不可靠的网络访问

有限的错误检查(等于没有)

传输性能高

无数据恢复特性



2. TCP报文段

image-20231022170354259

源端口号(16位):发送端的端口号,有端口号的协议(只有TCP、UDP)

目标端口号(16位):接收端的端口号,有端口号的协议(只有TCP、UDP)

序号(32位):seq,随机生成,发送端为每个字节进行编号,便于接收端正确重组

确认号(32位):ack,规定了发送方下次发送数据第一个字节数据的编号,作用是规定了发送端下次发送的内容

首部长度(4字节):TCP/UDP头部的长度,该字段的单位是32位,4位二进制最大表示15,所以数据偏移,也就是TCP首部最大60字节

保留(6位):无实际含义

控制位

描述了两台电脑目前处于什么状态

URG紧急位优先处理,本报文段中发送的数据是否包含紧急数据,必须和后面的紧急指针一起使用采用有效

PSH急切位插队,提示接收端应用程序应该立即从tcp接收缓冲区读走数据

RST重置位,如果收到RST=1的报文,说明与主机的连接出现练了严重的错误(如主机崩溃),必须释放连接,然后再重新建立连接

SYN同步位,用来同步序号,请求建立连接

ACK确认位,确认前面的字段是否有效

FIN结束位,通知对方本端口要关闭连接,标记数据是否发送完毕

窗口大小(16位):确认发送段本次发送数据的大小,该值在三次握手阶段协商得到

校验和(16位):检查数据是否完整,提供额外的可靠性紧急指针,标记紧急数据在数据字段中的位置

紧急指针(16位)

选项部分:可有可无



3. 三次握手的过程

image-20231022175550785

pc1想要和pc2建立连接

① pc1想要和pc2建立连接,它会发送seq=x,SYN=1的报文给pc2

② pc2 收到pc1的报文,同意并确定建立连接,并告诉pc1按照要求发送报文,所以pc2会发送seq=y,SYN=1,ACK=1,ack=x+1的报文给pc1

③ pc1收到pc2的报文,会按照要求发送序号,并告诉pc2也按照要求发送报文数据,所有pc1又会发送seq=x+1,ACK=1,ack=y+1的报文给pc2

pc1和pc2就建立连接了


3.1 三次握手的状态图

image-20231022183510747

客户机:Closed(主动打开)、同步已发送、已建立连接

服务器:Closed(被动打开)、监听、同步已收到、已建立连接


3.2 为什么需要三次握手,而不是二次,四次?

因为当pc2同意连接后,pc2就会提供端口一直给你提供服务,如果pc1这时候不想建立连接了,但是不回复pc2,那么pc2会一直在等pc1发送数据,会消耗pc2的资源,所以,pc1要再发送一次报文给pc2,为了给pc2确认pc1是否同意建立连接



4. 四次挥手

image-20231022184204351

客户机想要跟服务器断开连接过程

① 客户机请求断开连接,并确认断开连接,FIN=1,ACK=1

② 服务器同意客户机断开连接,ACK=1

③ 服务器请求断开连接,并确认断开连接,FIN=1,ACK=1

④ 客户机同意服务器断开连接,ACK=1

服务器处于半关闭状态


4.1 四次挥手的状态图

image-20231022184937589

客户机:(主动关闭)建立状态、终止等待1、终止等待2、2倍时间等待关闭

服务器:建立状态、关闭等待(通知应用进程)、最后确认、关闭