概述
主要任务:
-
对接端口
-
连接管理
-
分割和重组上下数据
-
差错和纠错功能
-
流量控制
传输层协议
TCP
特点:
-
可靠性高
-
端到端,面向连接
-
基于字节
-
速度慢
向下传递操作步骤:
-
接受来自应用层的8位字节的数据流,并根据MTU分段。
-
封装上队头标记,打包成数据包
-
将数据包传送给IP层(网络层)
TCP队头标记:(图片不贴)
-
端口(16*2):源端口和目的端口
-
序列号seq(32)
-
确认号ack(32):根据握手过程改变大小
-
Data Offset数据偏移(4):队头的总长,一个1标识四字节。
eg:1111,就是15(1111)*4(bit) = 60(bit),整个队头有60字节
-
保留位(4):目前还没制定用途
-
控制位(1*8):都是0或者1
-
CWR:用于 IP 首部的 ECN 字段。ECE 为 1 时,则通知对方已将拥塞窗口缩小。
-
ECE:在收到数据包的 IP 首部中 ECN 为 1 时将 TCP 首部中的 ECE 设置为 1,表示从对方到这边的网络有拥塞。
-
URG:紧急模式
-
ACK:确认序列号(ACK)有效。
-
PSH:推送,接收方应尽快给应用程序传送这个数据。
-
RST:该位为 1 表示 TCP 连接中出现异常必须强制断开连接。为重建链接做准备。
-
SYN:初始化一个连接的同步序列号(SEQ)
-
FIN:该位为 1 表示今后不会有数据发送,希望断开连接。
-
-
window(16):表示自己能接受到的流量大小(对方返传数据)
-
Checksum(16):校验数据包长度和是否正确
-
Urgent Pointer(16):紧急情况标识
-
options(32*N):额外用途
-
数据包
流程:建立连接
-
客户端发送【seq=a,SYN=1】给服务端
-
服务端发送【ack=a+1,seq=b,SYN=1,ACK=1】给客户端
-
客户端发送【seq=a+1,ack=b+1,ACK=1】给服务端,成功建立
流程:终止连接
-
客户端发送【seq=a,FIN=1,ACK=1】给服务端,
-
客户端进入FIN-WAIT1
-
-
服务端发送【seq=b,ack=a+1,ACK=1】给客户端,
-
服务端进入CLOSE-WAIT
-
客户端在接收到后进入FIN-WAIT2
-
-
服务端再发送【seq=b,ack=a+1,FIN=1,ACK=1】给客户端
-
服务端进入LAST-ACK
-
客户端在接收到后进入TIME-WAIT
-
-
客户端发送【seq=a+1,ack=b+1,ACK=1】给服务端
-
服务端接收到后CLOSE
-
服务端如果没有收到(ACK丢失),会再次发来FIN。
处于TIME-WAIT的客户端要再发一个ACK。
-
UDP
特点
-
可靠性低
-
一次性
-
无拥塞控制
-
不返回错误信息
-
不合并控制报文大小
-
速度快
向下传递操作步骤:
-
接受来自应用层的数据流,直接封装
-
传递给IP层
UDP队头标记:(图片不贴)
-
端口(16):源端口和目的端口
-
UDP总长度(16)
-
UDP检验和(16)
流程:
-
交给IP层处理
标签:seq,16,ACK,CS144,计算机网络,传输层,FIN,服务端,客户端 From: https://www.cnblogs.com/Birderr/p/17594399.html