七问TCP协议

1、TCP协议的三次握手的目的

以前只知道三次握手,四次挥手的过程。经过学习,我将TCP协议的三次握手理解为三个层次。

第一层理解,三次握手的目的是确认双方数据包发送和接收的能力。首先假设客户端发送一个SYN包给服务端,这是第一次握手。假如此时服务端收到了该报文,说明服务端知道客户端“发送消息”没有问题。此时,服务端发送SYN+ACK消息给客户端,这是第二次握手。假如此时客户端收到了该报文,说明客户端知道服务端“发送消息”和“接收消息”没有问题。但是此时服务端只知道客户端“发送消息”没有问题,不知道它“接收能力”怎么样。此时,客户端再次发送新的ACK给服务端,这是第三次握手。假如服务端收到了,说明客户端“发送”和“接收”都没有问题。此后,可以正常通信。

第二层次理解,刚开始客户端处于close状态,服务端处于listen状态(因为服务端会bind并listen本地端口,然后accept连接,客户端发起connect)。第一次握手,客户端给服务端发送SYN,且指明了客户端初始化序列ISN,此时客户端处于SYN_SEND状态。第二次握手,服务端收到SYN,将自己的SYN作为新报文进行应答,也会指明自己的序列号ISN。同时把客户端的ISN+1作为ACK给客户端。此时服务器处于SYN_RECV状态。第三次握手,客户端收到服务端的SYN,把服务端的ISN+1作为ACK给服务端,此时客户端处于Established状态。服务器收到ACK后,进入Established状态。

第三层理解,类如Https协议在握手时也会验证安全证书和密钥。

 

 

2TCP协议的帧结构

SYN:同步标志。表明同步序列编号栏有效,该标志仅在三次握手建立TCP连接时有效。

它提示TCP连接服务端检查序列编号,该序列编号为TCP连接初始端的初始序列编号。

ACK:确认标志。表明确认编号栏有效。TCP报头内的确认编号栏内包含的确认编号(w+1)为下一个预期的序列编号,同时提示远端系统已经成功接收所有数据。

URG:紧急标志。紧急标志为”1”表明该位有效。

PSH:推标志。该标志置位时,接收端不将该数据进行队列处理,而是尽可能地将数据转由应用处理。

RST:复位标志。用于复位相应的TCP连接。

FIN:结束标志。

 

3TCPUDP协议的不同之处

TCP提供超时重发,丢弃重复数据,校验数据等功能。UDP协议不可靠,它只是把应用程序传给IP层的数据报发送出去,但并不保证它们能到达目的地。由于不需在传输之前建立连接,且不提供重发等机制,所以传输速度快。此外,UDP是一种数据报文协议,不像TCP协议是流式协议所存在的“半包粘包”问题。

 

4TCP协议中的流量控制

TCP协议是通过滑动窗口机制进行流量控制的。TCP协议调用write函数将数据写入I/O缓冲的输出缓冲里,调用read函数从输入缓冲里读取数据,由于发送端及接收端对数据包的处理速度不一定相同,发送端将数据包发送给接收端,接收端的缓存再传输数据到应用层,这两个过程不一定能完全即时,如果数据发送的太快,接收端数据会溢出。而滑动窗口的功能即是对此过程进行流量控制,保证双方消息处理能力的可靠。

 

5TCP报头中的端口号

Socket编程时会给服务端bind一个端口号,服务端与客服端建立连接的过程中,客户端创建socket会被随机分配一个端口号,TCP协议通过不同的端口号传输数据给不同的应用程序。

 

6TCP协议的滑动窗口

滑动窗口的目的是衡量通信双方收发消息的能力。发送端收到接收端的确认包越快,说明接收端处理能力很好,此时发送端就不断调整滑动窗口的长度,加快发送消息。如果,接收方一直没有回复新的确认包,说明此时接收方处理能力有限,那么发送方也会减少发送。

TCP协议中有一种持续探测机制来请求窗口的大小,一般情况下不是空出一个字节的窗口就立马移动滑动窗口。而是等空闲出一半以上字节,才会更新窗口并通知对方。

 

7TCP协议的拥塞机制

拥塞控制机制是控制网络发送的能力。网络的发送能力与带宽有关系。一般可以认为通道的容量等于带宽*往返的延时。TCP协议将数据包传输到网络中时,TCP协议的连接只要能接收到对方的确认包,就认为网络带宽足够,然后会加快发包的速度。可以理解为:比如第一次发送1个数据包,等收到了确认包,下一次将以2的指数形式增长发送2包,然后4包,直到增长到一定时候将改为线性增长。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值