写在前面:这一系列文章是对计算机网络相关知识点整理的笔记,基本都是参考文章里的原话,做了整合,只是方便自己去看去复习,如果可以,希望朋友们点进参考的文章里仔细阅读,感谢大家!
固定部分20个字节,可选部分40个字节,最多60个字节。
typedef struct _TCP_HEADER
{
short m_sSourPort; // 源端口号16bit
short m_sDestPort; // 目的端口号16bit
unsigned int m_uiSequNum; // 序列号32bit
unsigned int m_uiAcknowledgeNum; // 确认号32bit
short m_sHeaderLenAndFlag; // 前4位:TCP头长度;中6位:保留;后6位:标志位
short m_sWindowSize; // 窗口大小16bit
short m_sCheckSum; // 检验和16bit
short m_surgentPointer; // 紧急数据偏移量16bit
}attribute((packed))TCP_HEADER, *PTCP_HEADER;
1. 源端口号:16位,2个字节。
2. 目标端口号:16位,2个字节。
3. 序列号seq: 32位,4个字节。用来标识 从TCP发送端向TCP接收端发送的数据字节流。(后面三次握手四次挥手会用到)
4. 确认号ack:32位,4个字节。确认端期望接收到的,下一个序号(上次已成功收到数据字节序号加1)。只有ACK设置为1才有效。(后面三次握手四次挥手会用到)
5.
(1)TCP头部长度字段:4位。一般称为数据偏移。指出头部占几个占32比特(4B)。(最大为15,所以TCP头最长为15*4B = 60B)或者说TCP报文段的数据部分,距离TCP报文段的起始处有多远。
(2)中间保留6位。
(3)后6位标志位:
6. 窗口大小字段:16位,2个字节。用于流量控制。表示本机期望的一次接受的字节数。
7. 校验和:16位,2个字节。发送方填充,接收方执行CRC算法(循环冗余校验),检验TCP报文段在传输过程中是否损坏。
8. 紧急指针:16位,2个字节。是一个偏移量,和序列号中的值相加,得到紧急数据的最后一个字节的序号。只有URG设置为1时才有效。
9. 选项字段:32位,4字节。可能包括窗口扩大因子、时间戳等等。
总图
(1)第一次握手:
(2)第二次握手:
(3)第三次握手:
可以有效的防止已经失效的连接请求又传送到的服务器,产生错误。
比如:
客户端发送连接建立请求报文,但是由于网络拥塞,服务器没有收到。客户端没有收到ack,放弃建立连接或者重新发送。
一段时间之后,这个连接建立请求报文到达服务器,如果不采用三次握手而是两次的话,此时服务器发送ack报文,连接就建立了。但是客户端已经放弃建立连接,不会向服务器发送数据。服务器单向建立连接造成资源浪费。
还是这张图
(1)第一次挥手:
(2)第二次挥手:
(3)第三次挥手:
(4)第四次挥手:
TCP是全双工模式,因此要断开连接需要分别断开主机1到主机2的连接、主机2到主机1的连接。
当主机1发出FIN报文段时,只表示主机1已经没有数据要发送了,但是可以接受主机2发送的数据。
当主机2返回ACK报文段时,表示主机2已经知道主机1没有数据发送。
当主机2发送FIN报文段时,表示主机2也没有数据要发送了。
当主机1返回ACK报文段后,等待两个最大报文生存周期(防止还有数据要传)关闭连接。
拥塞控制的是一个全局性的过程,而流量控制室点对点通行量的控制。
慢开始和拥塞避免。快重传(快恢复)
假设当前发送方拥塞窗口cwnd的值为1,而发送窗口swnd等于拥塞窗口cwnd,因此发送方当前只能发送一个数据报文段(拥塞窗口cwnd的值是几,就能发送几个数据报文段),接收方收到该数据报文段后,给发送方回复一个确认报文段,发送方收到该确认报文后,将拥塞窗口的值变为2。
发送方此时可以连续发送两个数据报文段,接收方收到该数据报文段后,给发送方一次发回2个确认报文段,发送方收到这两个确认报文后,将拥塞窗口的值加2变为4,发送方此时可连续发送4个报文段,接收方收到4个报文段后,给发送方依次回复4个确认报文,发送方收到确认报文后,将拥塞窗口加4,置为8,发送方此时可以连续发送8个数据报文段,接收方收到该8个数据报文段后,给发送方一次发回8个确认报文段,发送方收到这8个确认报文后,将拥塞窗口的值加8变为16,
当前的拥塞窗口cwnd的值已经等于慢开始门限值,之后改用拥塞避免算法。
每个传输轮次,拥塞窗口cwnd只能线性加一,而不是像慢开始算法时,每个传输轮次,拥塞窗口cwnd按指数增长。
重传机制有两种,超时重传和冗余ACK。快重传是针对冗余ACK的方法。
头部8B,UDP校检是通过增加12B的伪首部来实现的
之后通过反码求和来进行差错校检
传输层详解_大师兄啊的博客-CSDN博客_传输层
计算机网路-传输层详解_善水的博客-CSDN博客_计算机网络传输层
传输层 概述_星辰火之梦-CSDN博客_传输层
【计算机网络】传输层知识点总结_yaoyz105-CSDN博客_计算机网络传输层知识点
传输层概述以及传输层端口_fern_girl的博客-CSDN博客_传输层端口
TCP协议详解_柒年-CSDN博客_tcp协议
TCP协议的学习(二)TCP头部信息_唯一的信仰-CSDN博客_tcp头部信息
什么是TCP协议?_YUAN的博客-CSDN博客_tcp协议
408计算机网络第五章总结_Viator-CSDN博客_计算机网络第五章总结
TCP的拥塞控制(详解)_努力进阶的小菜鸟-CSDN博客_tcp拥塞控制