赞
踩
方法一:标准既定的端口号
方法二:时序分配法
TCP为了确保可靠性传输,采取了很多机制,如确认校验和、确认序列号、确认应答机制、数据重发、连接管理、窗口控制等
发送端的数据到达目标主机时,接收端会返回一个已收到消息的通知,这个消息就是ACK(Positive Acknowled-gement
)。ACK表示确定收到了消息。如果确定没有收到消息,会回复一个NACK.
发送端和接收端之间的确认应答就像两个人聊天,发送端对接收端说话(发送数据),接受端肯定回答表示听懂了(ACK
),否定回答表示没听懂(NACK
).没有回答也是认为没听懂
没有回应时,发送端会等待特定时间,然后重发数据。否定回答会直接重发数据。
接收端没有收到数据或者接收端收到了数据但是回复的ACK在路上丢失,只要没有回应,发送端就会重发数据,如下图
目标主机接受数据时,由于发送端有重发机制,所以可能会反复接收到重复的数据。重复的数据在上层应用传输时会被放弃,即重复控制机制
重发数据、重复控制、包括确认应答机制都是依赖于序列号完成。
序列号是将数据的每一个字节按顺序编号,每次发送一部分。目标主机接收到数据后,会将自己下一次该接受的序列号作为应答返回。比如第一次发送数据序列号1-1000,目标主机接受到数据后会返回1001,如下图
重发超时的那个时间间隔是如何确定的?
三次握手
):客户端先发送一个SYN包请求建立连接,服务器端回复一个ACK确认应答,同时也发送一个SYN包请求建立连接,客户端再回复一个ACK确认应答。连接就建立完成可以开始通信。四次挥手
):客户端发送一个FIN包请求断开连接,服务器端回复一个ACK表示收到,然后再单独发送一个FIN包请求断开连接,客户端再回复一个ACK表示收到。这样连接就关闭了,无法通信。如下图MSS
,Maximum Segment Size),也就是数据段。数据段最理想的大小是不会被IP分片处理的最大长度为了避免所有的TCP连接一开始就发送大量的窗口数据导致网络拥堵,所以TCP在开始传输数据时,有一个慢启动的机制。
慢启动:开始传输数据时,定义一个拥塞窗口,初始化是1个数据段,然后随着通信的进行,每一次收到ACK确认应答,拥塞窗口的大小就+1.每次发送数据时,窗口的大小都从接收端指定的流控制窗口和拥塞窗口中选择最小的哪一个作为窗口大小进行发送数据。
如果遇到了超时重传,再次发送数据时拥塞窗口大小会重新初始化为1(相当于再次慢启动)
为了避免拥塞窗口越来越大,引入了慢启动阈值。只要拥塞窗口的大小超过阈值,就不再单纯+1,而是按照某种比例来进行放大窗口
高速重发时,慢启动阈值的大小会变成当时拥塞窗口大小的一半。总的变化如下图
Negle算法
MSS
)时延迟应答机制
MSS
)的数据才会确认应答一次。其他情况都是延迟0.5秒再发送确认应答ACKCopyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。