TCP基本概念
TCP Transmission Control Protocol 传输控制协议是一种面向连接的、可靠的、传输层协议。TCP协议基于IP层

TCP跟UDP的区别
区别:
1.TCP面向连接的,UDP无连接
2. TCP基于字节流传输,UDP基于数据报传输
3. TCP是可靠的,具备有序、不丢失、不重复、无差错等特性,UDP不具备
4. TCP具备拥塞控制、流量控制等机制,UDP不具备
5. TCP对系统开销更大,UDP较小
应用场景:
1 . 一些应用层协议都会基于TCP协议,利用TCP的可靠稳定的机制,比如HTTP、FTP等,对数据传输的完整性要求高、质量要求高
2. UDP对数据完整性需求低,对实时性和传输速度要求高,比如网络视音频传输
TCP格式

TCP头部固定20个字节
source port : 源端口 2个字节
dest port:目的端口 2字节
sequence number:报文序号,表示报文段中第一个数据的序号,4字节
acknlwledgment number:确认序号,4字节,接收端期望收到的下一个序号,是上次已陈工收到数据字节序号加1
offset:首部中32bit的数目,4位 0.5字节
reserved:预留,4位 0.5字节
tcp flags: 8位 有8个flag
- URG:紧急指针
- ACK:应答域有效
- PSH:PUSH操作,数据包到达接收端后,立即传送给应用程序
- RST:连接复位表示,复位错误连接、拒绝错误和非法的数据包
- SYN:同步序号,用于握手
- FIN:结束序号,用于挥手
Window:滑动窗口大小 2字节
Checksum:检验和 2字节;检验和是对“数据段头”,“数据”,“伪头部”这三部分进行校验。伪头部包括源主机和目的主机的IP地址,TCP协议号,TCP数据段长度
Urgent Poiner:紧急指针 2字节,当URG为1时候才有用,指出本数据段中紧急数据的字节数
TCP Options: 其他TCP参数 共4个字节
TCP 三次握手和状态
TCP协议提供可靠的连接服务,通过三次握手进行连接初始化。三次握手的目的是同步连接双方的序列号和确认号并交换TCP窗口大小的信息。

三次握手流程:
- 客户端发起握手报文,SYN为1,seq=x ,进入SYN_SEND状态
- 服务端接收到客户端的SYN握手报文,状态变为SYN_RCVD状态,响应报文seq=y,ack=x+1
- 客户端接收到服务端的响应报文,状态变为Estalished
- 客户端向服务端发送ack = y +1 报文
- 服务端接收到ack报文,状态变为Estalished
三次握手的意义:
防止已经失效的连接请求报文突然传送到服务端,产生错误,造成不需要的连接浪费资源
例子:
客户端发起连接,超时较久,过了长时间后服务端才接收到,回复ACK,假如只有2次握手,那么这是就建立了连接,但是实际上这个连接是不需要的;有第三次握手,客户端就不会回复ACK,连接就不会被建立完成
TCP 四次挥手和状态

四次挥手流程:
服务端和客户端都可以主动断开连接,假设主动断开连接为A,被动为B
- A 发起 FIN ,A状态变为FIN_WAIT_1
- B 接收到FIN,回复ACK,状态变为CLOSE_WAIT
- B 回复FIN,状态变为LAST_ACK
- A 接收到B的FIN,状态变为TIME_WAIT2
- A 等待片刻后回收端口资源,B端变为Close
四次握手的意义:
TCP协议是全双工的,双方都可以同时发送数据,因此当一方要断开连接时,需要确保对端的数据传输也完成,才可以断开连接。因此有4次挥手:
- 主动断开的一方A,告知对方B数据发送完成,要断开连接,FIN
- B接收到了FIN,响应ACK,代表收到了断开连接的请求
- B处理完剩余数据,告知A自己的数据也传输完成,可以断开连接,FIN
- A回复ACK,确认收到B的FIN,连接确认断开
例子:
客户端发起连接,超时较久,过了长时间后服务端才接收到,回复ACK,假如只有2次握手,那么这是就建立了连接,但是实际上这个连接是不需要的;有第三次握手,客户端就不会回复ACK,连接就不会被建立完成
TIME_WAIT
TIME_WAIT 状态都是出现在主动断开连接的一方,正常情况下连接都是由客户端断开
TIME_WAIT的作用::
(1) 表示主动断开连接的一方接收到了对方的FIN,等待一段时间(操作系统决定)后再回收资源端口,进入close
(2) 主动断开方A最后会回复ACK,如果这个ACK丢失了那么B会重发FIN;如果不维持FIN_WAIT状态,直接断开连接,那么服务端重发的FIN会造成断开方A的报错
(3) 在TIME_WAIT期间,客户端无法创建相同IP端口的连接,可以保证下次用相同IP和端口连接时,旧连接的数据是完全消失的
网络中的数据单位
报文 message:应用层中的数据传输单位
段 segment:多个段组成报文,是传输层的数据传输单位
包 package:网络层传输单位,TCP IP中的基本单元
数据报 datagram: 面向无连接数据传输方式时的基本单元,UDP
帧 frame:数据链路层单位
MTU:Maximum Transmit Unit IP网络层的最大传输单元
MSS:Maximum Segent Size TCP提交给IP层的最大分段大小,传输层的段大小
本文深入解析TCP传输控制协议,对比UDP,阐述其面向连接、可靠性、拥塞控制等特性,介绍三次握手、四次挥手过程及TIME_WAIT状态的意义。
1548

被折叠的 条评论
为什么被折叠?



