数据通信与网络--2.传输层协议——TCP协议和UDP协议
CSDN上的大佬们实在太多了,只是记录一下这个星期学习的内容,请多多指教
------------------------------------------------------------------------------
前提须知
- TCP的运行机制:连接(三次握手),数据传输,断开(四次挥手)
- TCP为应用层提供全双工服务,这意味着 数据能在两个方向上独立的进行传输,因此连接的两断 必须要保证每个方向上的传输数据都断开。
- 在PC1发出FIN,且PC2同意后(关闭C到S单路),PC2还会继续发送未发完的数据包
因为TCP是双工通道的,S到C单路未关闭 - RST:一般是在FIN之后才会出现为1的情况,表示的是连接重置。
一般地,当出现FIN包或RST包时,我们便认为客户端与服务器端断开了连接;
SYN和SYN+ACK:而当出现SYN和SYN+ACK包时,我们认为客户端与服务器建立了一个连接
TCP
TCP头部参数
TCP头部参数
序号 | 参数 | 解释 | 详释 |
---|---|---|---|
1 | S.Port (Source port) | 源端口 | 数据发送方 的空闲端口,被随机选择的端口 |
2 | D.Port (Destination port ) | 目的端口 | 被访问设备的端口,端口常由应用指定,代表访问的应用、服务类型 |
3 | 序列号 (Sequence number) | 本段发送的每个TCP消息中的 序号值 不一样 | (作用:用来区分不同的TCP消息) |
4 | 确认序列号 (Acknowledgement number) | 对于收到的TCP消息进确认 | (对收到的TCP消息的序列号值+1表示确认) |
5 | 头部长度 (Header length) | 段头的长度,表示TCP头部大小 | 最小(固定部分)20Bit;最大60Bit |
6 | 保留字段 (Reserved ) | 未定义,保留未使用的部分 | |
7 | 控制字段 (Control bits ) | SYN | 取值为1,代表该消息 用于请求建立TCP连接 |
FIN | 取值为1,代表该消息 用于请求断开TCP连接 | ||
ACK | 取值为1,代表该消息的 确认序列号有效 | ||
RST | 取值为1,代表该消息 重新建立连接、断开连接 | ||
8 | 窗口字段 (Window) | 用于实现滑动窗口的机制 | 代表本设备最大的接收处理能力 |
9 | 校验 (Checksum) | 检查数据段段头的完整性 | |
10 | 紧急指针位 (Urgent) | 表示数据段 携带应用层数据 需要紧急处理 | 提高优先级 |
11 | 可选项 (options) | 代表TCP协议的可选功能,最大长度40bit,例如认证功能 |
TCP的3步骤 || 连接建立(三次握手)|| 数据传输 || 连接断开(四次挥手)
1. TCP的 || 连接建立(三次握手)
第一次:C–>S 192.168.73.235 --> 52.5.239.142 SYN:请求建立C到S单路
第二次:S–>C 52.5.239.142 --> 192.168.73.235 ACK:同意建立C到S单 路:SYN:请求建立S到C单路
第三次:C–>S 192.168.73.235 --> 52.5.239.142 ACK:同意建立S到C单路
TCP连接双通道建立成功
2. TCP的 || 数据传输
在数据传输的过程中,我们能在wireshark观测到的数据,就是极大变化的Seq\Ack\Win\Len等数据
- Seq序列号,Ack确认序列号=Seq+接收到的数据包长度
- Win窗口字段
- Len 数据包bit长度
滑动窗口机制
确认应答机制,对每一个发送的数据都对应有一个ACK确认应答。
但是这样采取一发一收的方式 有一个很大的缺点就是 效率太差,为了提高效率采用滑动窗口,即一次性发送多个数据
- 在TCP三次握手建立连接时,双方都会通过Window字段告诉对方本端最大能够接受的字节数(也就是缓冲区大小)。
- 连接建立成功之后,发送方会根据接受方宣告的Window大小发送相应字节数的数据。
- 接受方接受到数据之后会放在缓冲区内,等待上层应用来取走缓冲的数据。若数据被上层取走,则相应的缓冲空间将被释放。
- 接收方根据自身的缓存空间大小通告当前的可以接受的数据大小( Window )。
- 发送方根据接收方当前的Window大小发送相应数量的数据。
大牛详解: 【计算机网络】TCP协议详解.
重发机制
超过一定时间,还没有收到确认应答的数据包,就需要重新发送
3. TCP的 || 连接断开(四次挥手)
TCP支持全双工模式传输数据,这意味着同一时刻两个方向都可以进行数据的传输。在传输数据之前,TCP通过三次握手建立的实际上是两个方向的连接,因此在传输完毕后,两个方向的连接必须都关闭。
如图所示:
- 由PC1发出一个FIN字段置”1 ”的不带数据的TCP段;
- PC2收到PC1发来的FIN置位的TCP报文后,会回复一个ACK置位的TCP报文。
- 若PC2也没有需要发送的数据,则直接发送FIN置位的TCP报文。假设此时PC2还有数据要发送,那么当PC2发送完这些数据之后会发送一个FIN置位的TCP报文去关闭连接。
- PC1收到FIN置位的TCP报文,回复ACK报文,TCP双向连接断开。
第一次:C–>S 192.168.73.235 --> 52.5.239.142 SYN:请求拆除C到S单路
第二次:S–>C 52.5.239.142 --> 192.168.73.235 ACK:同意建立C到S单路:SYN:请求拆除S到C单路
第三次:C–>S 192.168.73.235 --> 52.5.239.142 ACK:同意拆除S到C单路
(看不出第二次有分开两次发送数据)
RST连接重置
一般是在FIN之后才会出现为1的情况,表示的是连接重置。
一般地,当出现FIN包或RST包时,我们便认为客户端与服务器端断开了连接;
UDP
UDP头部参数
小细节
TCP ACK值的变化
过程 | ACK值的变化 |
---|---|
三次握手 | ACK=Seq+1 |
数据传输 | ACK=Seq+数据长度 |
四次挥手 | ACK=Seq+1 |