传输层
TCP协议
TCP报文格式
标志位
URG(URGENT POINTER):指示报文中有紧急数据,应尽快传送(相当于高优先级的数据)。
PSH (PUSH):为1表示是带有push标志的数据,指示接收方在接收到该报文段以后,应尽快将这个报文段交给应用程序,而不是在缓冲区排队。
RST (RESET): TCP连接中出现严重差错(如主机崩溃),必须释放连接,在重新建立连接。https://www.jianshu.com/p/3f557a7351a3
FIN (FINAL):发送端已完成数据传输,请求释放连接。
SYN (SYNCHRONISATION):处于TCP连接建立过程。 (Synchronize Sequence Numbers)
SYN洪泛攻击https://blog.csdn.net/stone_flower_rain/article/details/48104749
ACK (ACKNOWLEDGEMENT):确认序号标志,为1时表示确认号有效,为0表示报文中不含确认信息,忽略确认号字段。
选项:长度可变,最长可达40字节。头部总长最大60字节。
紧急数据与紧急指针 https://www.jianshu.com/p/65a4b8c059d4
MSS和MTU
MTU:最大传输单元
以太网Ethernet最大的数据帧是1518字节。以太网帧的帧头14字节和帧尾CRC校验4字节。MTU:最大传输单元,大多数网络MTU是1500字节,有些网络启用了巨帧,能达到9000字节。
MSS:最大分段大小(TCP数据包每次能够传输的最大报文段长度)
MSS就是TCP数据包每次能够传输的最大量。为了达到最佳的传输效能,TCP协议在建立连接的时候通常要协商双方的MSS值,这个值TCP协议在实现的 时候往往用MTU值代替(需要减去IP数据包包头的大小20Bytes和TCP数据段的包头20Bytes)所以往往MSS为1460(如图1中红色方框所示的SYN包中的MSS值)。通讯双方会根据双方提供的MSS值得最小值确定为这次连接的最大MSS值。 MSS为1460是由1500-20(IP头)-20(TCP头)计算出的。
实际场景下,TCP包头中会带有12字节的选项----时间戳。
这样,单个TCP包实际传输的最大量就缩减为1448字节。1448=1500-20(IP头)-32(20字节TCP头和12字节TCP选项时间戳)
三次握手
为什么需要三次握手?
三次握手主要目的是:信息对等和防止超时。
防止超时导致脏连接。如果使用的是两次握手建立连接,假设有这样一种场景,客户端发送了第一个请求连接并且没有丢失,只是因为在网络结点中滞留的时间太长了,由于TCP的客户端迟迟没有收到确认报文,以为服务器没有收到,此时重新向服务器发送这条报文,此后客户端和服务器经过两次握手完成连接,传输数据,然后关闭连接。此时此前滞留的那一次请求连接,网络通畅了到达了服务器,这个报文本该是失效的,但是,两次握手的机制将会让客户端和服务器再次建立连接,这将导致不必要的错误和资源的浪费。如果采用的是三次握手,就算是那一次失效的报文传送过来了,服务端接受到了那条失效报文并且回复了确认报文,但是客户端不会再次发出确认。由于服务器收不到确认,就知道客户端并没有请求连接。
三次握手能否携带数据?
https://baijiahao.baidu.com/s?id=1653612208831429921&wfr=spider&for=pc
第三次握手失败会发生什么?
四次挥手
为什么建立连接是三次握手,关闭连接确是四次挥手呢?
建立连接的时候, 服务器在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。 而关闭连接时,服务器收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,而自己也未必全部数据都发送给对方了,所以己方可以立即关闭,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送,从而导致多了一次。
2MSL意义:
1、保证最后一次握手报文能到B,能进行超时重传。
2、2MSL后,这次连接的所有报文都会消失,不会影响下一次连接。
滑动窗口协议
累计确认机制
TCP的可靠性,超时重传怎么实现,M1,M2,M3,M4,M5,丢失M2;怎么重传M2?为什么不用重传M4,M5?
https://blog.csdn.net/qq_23204557/article/details/99258199
超时重传机制
RTT(Round Trip Time):一个连接的往返时间,即数据发送时刻到接收到确认的时刻的差值;
RTO(Retransmission Time Out):重传超时时间,即从数据发送时刻算起,超过这个时间便执行重传。
RTT和RTO 的关系是:由于网络波动的不确定性,每个RTT都是动态变化的,所以RTO也应随着RTT动态变化。
流量控制
拥塞控制
超时重传与快速重传
https://www.jianshu.com/p/62940de97ca5