传输层协议
1. TCP、UDP的特性
1.1 TCP的特性
面向连接
提供全双工服务
半关闭(四次挥手)
错误检查
将数据打包成段,排序(分片)
确认机制
数据恢复,重传
流量控制,滑动窗口
1.2 UDP的特性
工作在传输层
面向无连接
提供不可靠的网络访问
有限的错误检查(等于没有)
传输性能高
无数据恢复特性
2. TCP报文段

源端口号(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. 三次握手的过程

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 三次握手的状态图

客户机:Closed(主动打开)、同步已发送、已建立连接
服务器:Closed(被动打开)、监听、同步已收到、已建立连接
3.2 为什么需要三次握手,而不是二次,四次?
因为当pc2同意连接后,pc2就会提供端口一直给你提供服务,如果pc1这时候不想建立连接了,但是不回复pc2,那么pc2会一直在等pc1发送数据,会消耗pc2的资源,所以,pc1要再发送一次报文给pc2,为了给pc2确认pc1是否同意建立连接
4. 四次挥手

客户机想要跟服务器断开连接过程
① 客户机请求断开连接,并确认断开连接,FIN=1,ACK=1
② 服务器同意客户机断开连接,ACK=1
③ 服务器请求断开连接,并确认断开连接,FIN=1,ACK=1
④ 客户机同意服务器断开连接,ACK=1
服务器处于半关闭状态
4.1 四次挥手的状态图

客户机:(主动关闭)建立状态、终止等待1、终止等待2、2倍时间等待关闭
服务器:建立状态、关闭等待(通知应用进程)、最后确认、关闭