概述
计算机网络
TCP三次握手(同步SYN 确认ACK)
发送端 —SYN标志的数据报 seq=x—>接收端 (SYN=1)
发送端<—SYN/ACK标志的数据报 seq = y ack=x+1—接收端 (SYN=1 ACK=1)
发送端—ACK标志的数据报 seq=x+1 ack=y+1—>接收端 (ACK=1)
SYN=1而ACK=0,表明这是一条请求连接报文,对方同意连接应在响应报文段设置SYN=1 ACK=1. SYN=1就表示这是一个连接请求或者连接接受报文,只有ACK=1时确认号才有效,在建立连接以后所有传送的报文段必须ACK置1
seq是指本报文段所发送的数据的第一个字节的序号,ack表示期望收到的下一个报文段的第一个数据字节序号,表示之前的已经收到
前两次握手都不携带数据,会分别消耗掉一个序号,第三次握手可以携带数据,如果携带数据则不消耗序号
为什么三次握手
三次握手的目的是建立可靠的通信信道,简单的说就是数据的发送和接收,三次握手的主要目的就是双方确认自己与对方的发送与接收都是正常的。
第一次:Client什么都不能确认;Server确认了对方发送正常,自己接收正常
第二次:Client确认了自己发送、接收正常,对方发送接收正常;Server确认了对方发送正常,自己接收正常
第三次:Client确认了自己发送、接收正常,对方发送接收正常;Server确认了自己发送、接收正常,对方发送接收正常
为什么回传SYN
接收端传回发送端发送的SYN为了告诉发送端,接收的信息确实时你所发送的信号。SYN是TCP/IP建立连接时使用的握手信号,客户发送一个SYN信号,服务器使用SYN-ACK应答表示接收到了这个消息,客户机再ACK消息响应,这样才建立起可靠的TCP连接。
传了SYN,为什么还要传ACK
传了SYN只能证明发送方到接收方的通道没问题,但是接收方到发送方的通道还需要ACK信号来验证
四次挥手(FIN终止)
主动关闭方—FIN=1 seq=u(前面已经收到的数据最后一个字节序号+1)—>被动关闭方
主动关闭方<–FACK=1 seq=v ack=u+1—被动关闭方 (主动方不能发了,但是还要接)
<中间可能被动方还向主动方发了数据,seq = w>
主动关闭方<—FIN=1 ACK =1 seq=w ack=u+1—被动关闭方
主动关闭方—ACK =1 seq=u+1 ack=w+1—>被动关闭方(此时连接还没释放,进入时间等待计时器设置的时间2MSL(最长报文段寿命)),因为防止最后一个确认报文没有被收到,被动方再次发送释放连接请求,这样被动方就无法进入关闭状态
**FIN报文(释放连接报文)**即使不携带数据也消耗一个序号
TCP还设置了一个保活计时器,服务器每次收到客户端消息,就重置保活计时器,通常时两小时,两小时没有收到客户数据,发送一个探测报文段,每隔75秒发一次,若一连发10次都没有回应,就关闭连接。防止客户机出故障,服务器无限制的等待。
为什么要四次挥手
任何一方都可以再数据传送结束后发送连接释放通知,待对方确认后进入半关闭状态,当另一方也没有数据再发送的时候,则发送连接释放通知,对方确认后就完全关闭连接
TCP任何保证可靠传输
- 数据被分割成TCP认为最适合发送的数据块
- TCP给发送方发送的每一个包进行编号,接收方对数据包进行排序,把有序数据发送给应用层
- 校验和:TCP 将保持它首部和数据的检验和。这是⼀个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报⽂段和不确认收到此报⽂段。
- TCP接收端会丢弃重复的数据
- 流量控制: TCP 连接的每⼀方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送⽅的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。 (TCP 利用滑动窗口实现流量控制)
- 拥塞控制:当网络拥塞时,减少数据的发送
- ARQ协议:每发送完一个分组就停止发送,等待对方确认,收到确认后再发送下一个分组
- 超时重传:TCP发送一个段后,启动一个定时器,等待目的端确认收到这个报文段,如果不能及时收到一个确认,将重发这个报文段
ARQ协议((Automatic Repeat-reQuest)
自动重传请求时OSI模型中数据链路层和传输层的错误纠正协议之一。通过确认和超时两个机制,再不可靠服务的基础上实现可靠的信息传输,包括停止等待ARQ和连续ARQ协议
停止等待ARQ协议
- 基本原理:没发送完一个分组就停止发送,等待确认(恢复ACK),如果超过一段时间没有收到确认,说明没有发送成功,需要重新发送,直到收到确认后再发下一个分组
- 若接收方收到重复分组,丢弃,但同时要发送确认
- 简单,但是信道录用率低等待时间长
- **无差错情况:**发送方发送分组,接收方规定时间内收到并回复,发送方再次发送
- 出现差错(超时重传):超过一段时间没有收到确认,重发前面发送过的分组,每次发送设置一个定时器,时间比分组传输的平均往返时间更长一点------自动重传请求ARQ协议。
- 确认丢失和确认迟到:接收方发送的确认消息再中途丢失,发送方超时重传,接收方此时丢弃重复消息,并向发送方确认消息;确认迟到是发送方超时重传以后收到了上一次的确认消息,发送方直接丢弃重复的确认消息,接收方直接丢弃重复消息
连续ARQ协议
可以提高信道利用率,发送方维持一个发送窗口,凡是位于发送窗口内的分组可以连续发送出去,而不需要等待对方确认,接收方一般采用累积确认,对按序到达的最后一个分组发送确认,表明这个分组为止所有分组都已经正确收到了。
优缺点:信道利用率高,容易实现,即使确认丢失,也不必重传。但是不能向发送方反映出已经正确接收到的所有分组信息。如果发送5个分组,只收到前两个确认,发送方要重发后三个,Go-Back-N,需要退回来重传已经发送过的N个消息
参考:JavaGuide的pdf整理
《计算机网络》
最后
以上就是风趣百褶裙为你收集整理的计算机网络-三次握手/四次挥手/可靠传输/ARQ协议的全部内容,希望文章能够帮你解决计算机网络-三次握手/四次挥手/可靠传输/ARQ协议所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复