【网络】TCP协议!!

  • TCP协议段结构

【网络】TCP协议!!

源端口地址和目的地址:表示数据从哪个进程来,哪个进程去
32位序号:每个TCP数据包发送出去,需要序号进行编号,方便接受端正确的识别包的序号
32位确认序号:每个包发送出去需要对端确认,确认序号为了给对端发送确认序号
4位TCP报头长度:用来表示TCP首部有多少个32bit位(4字节),TCP最大长度为15*4=60
6个标志位
URG:表示紧急指针是否有效
ACK:确认报文段
PSH:提示接受端的程序立即将TCP缓冲区里面的数据读走
RST:复位报文段
SYN:请求连接,同步报文段
FIN:结束报文段
16位窗口大小:用于记录当前缓冲区的大小,方便
16位校验和:发送端填充,CRG校验,接收端如果不通过,则数据有问题。此处的校验不仅包括TCP首部也包含TCP数据部分
16位紧急指针:标识那部分是紧急数据

  • 连接管理机制
    【网络】TCP协议!!

  • 问题:1、为什么连接的时候是三次握手?

    答:在客户端向服务器发起连接请求的时候,客户端向服务区发送SYN报文,服务器最为应答发送SYN+ACK报文,如果只有两次握手,那么服务器回应的报文可能丢失,那么服务器端就认为连接已经建立,但是客户端没有接收到回应报文,那么客户端就会继续想服务器发送连接请求。这样就会严重浪费服务器的资源。如果是比三次更多的奇数次握手,那么结果和三次一样,如果是偶数次握手,结果和两次握手的结果相同。

  • 问题:2、为什么断开连接的时候是四次挥手?
    答:断开连接的时候,一般由客户端提出断开请求(发送FIN报文),这时候服务器向客户端发送ACK报文确定,这时候服务器准备关闭,当服务器真正调用close关闭连接的时候回向客户端发送FIN报文。当客户端接收到服务器的报文的时候进入TIME_WAIT状态,客户端发送ACK应答报文,服务器关闭连接。

  • 问题:3、TIME_WAIT状态是两次报文存在最大周期?

    答:最后一次发送的应答报文可能会丢失,这时候服务器会以为发送的报文丢失发生重传,两倍的报文存在周期是为了让服务器端能够接收到准确的应答报文。