tcp协议 传输控制协议 (面向连接 稳定 慢)
udp协议 用户数据报协议(无连接 不稳定 快)
tcp协议头部
端口号,目标端口号:区别应用程序
客户端的端口号是随机的,服务端的端口号一般是固定的。
序号:区分哪个应用程序访问服务端
确认号(ack):告诉对方我收到了你的消息
首部长度:表示tcp报文的首部长度
控制位:SYN FIN ACK RST PSH URG
SYN: 同步位 syn=1 请求建立连接
FIN: 结束位 fin=1 请求断开
ACK: 确认位 syn=1 ack=1 同意建立连接 fin=1 ack=1 同意断开连接
RST: 重置位 如果收到rst=1的报文,说明主机的连接出现了严重的错误,必须释放连接,然后在重新建立连接。或者说明上次的发送给主机的数据有问题,主机拒绝相应。
PSH: 急切位 提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间。 如果收到psh=1的报文,则表示对方应当立即把数据提交到给上层应用,而不是缓存起来,如果应用程序不将接收到的数据收走,就会一直停留在tcp接收缓存区中
URG: 紧急位 表示本段文中发送的数据是否包含紧急数据。后面的紧急指针字段只有urg=1才有效
窗口大小:调节每次发送的数据包量 服务端和客户端之间会根据实际情况自动调节数据包的个数
紧急指针:提供额外的可靠性紧急指针:标记紧急数据在数据字段中的位置
tcp三次握手的过程
客户端主动发起请求报文,其中报文序号是随机产生的x,并且报文的控制位 SYN=1,代表请求建立连接。
当服务端收到客户端发来的建立连接报文,会回复一个报文。其中报文序号是随机产生的y,生成一个确认号为客户端报文序号+1(x+1),并希望客户端下次发送的报文序号为x+1,然后控制位 SYN=1,ACK=1 代表同意建立连接。
当客户端收到服务端发送的同意建立连接的报文时,会回复一个确认报文。其中报文序号为服务端要求的报文序号x+1,在生成一个确认号,值为服务端的报文号+1(y+1),最后,控制位ACK=1代表收到对方同意连接的请求。
1.CLOSED 没有任何连接状态
2.LISTEN 监听状态,等待来自别的TCP端口的连接请求
3.SYN-SENT 在发送连接请求后,等待对方确认
4.SYN-RECEIVED 在收到和发送一个连接请求后,等待对方确认
5.ESTABLISHED 代表传输连接建立,等待数据传输
6.FIN-WAIT-1 主动关闭,主机已发送关闭连接请求,等待对方确认
7.FIN-WAIT-2 主动关闭,主机已收到对方关闭传输连接的请求,等待对方发送关闭传输连接请求
8. TIME-WAIT 完成双向传输连接关闭,等待所有分组消失
9.CLOSE-WAIT 被动关闭,收到对方发来的关闭连接请求,并已确认
10.LAST-ACK 被动关闭,等待最后一个关闭传输连接确认,并等待所有分组消失
11.CLOSING 双方同时尝试关闭传输连接,等待对方确认
客户端发送一个fin给服务端,自己进入FIN-WAIT-1状态,这是等待接收服务端报文有两种可能
1.ACK=1 进入半关闭状态,我收到了断开请求,但我们之间还有数据没传完
2.ACK=1,FIN=1 我收到了断开请求,并断开了