计算机网络基础知识——运输层

计算机网络基础知识——运输层

● 一、谈一下,为什么tcp为什么要建立连接?
考察点:TCP
参考回答:保证可靠传输。

● 二、请你解释一下TCP为什么可靠一些
考察点:TCP
参考回答:三次握手、四次挥手、确认机制、超时重传机制、滑动窗口、拥塞控制

● 三、请说明一下哪种应用场景会使用TCP协议,使用它的意义
考察点:TCP协议
参考回答:当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议

● 四、简单描述一下,TCP的连接和释放过程。
考察点:网络基础

1、TCP三次握手

TCP运输连接有三个阶段:连接建立、数据传送、连接释放 。TCP连接过程通常叫做握手,握手需要客户端和服务器端交换三个报文,如下图所示。

之所以需要三次握手是因为TCP是可靠传输,三次能够刚好可靠又不多余。TCP三次握手与Socket的连接过程是相关联对应的,Socket就是对于TCP/IP的封装。

客户端有CLOSED、SYN-SEND、ESTABLISHED三种状态,服务端有CLOSED、LISTEN、SYN-RCVD、ESTABLISHED四种状态。服务器会首先创建连接,并且进入监听等待阶段,等待客户端的请求,当需要发送请求时,浏览器客户端主动打开连接,然后服务器被动打开连接。
在这里插入图片描述

连接过程

  • 客户端在需要时,向服务器发起请求连接报文,发出后状态从CLOSED转换为SYN-SEND 同步-已发送状态
  • 服务器一直处于LISTEN状态,接收到请求后,对客户端的请求进行回应,转换为SYN-RCVD,同步-已收到状态
  • 客户端收到服务器的回应后,状态转换为ESTABLISHED,并且再次向服务器发送确认
    服务器收到客户端的确认之后,服务器也转换为ESTABLISHED状态,完成了连接

发出消息或者收到消息后状态才会进行切换,客户端与服务器的握手是一个往复确认的过程

  • 客户端:发出确认请求,SYN=1,seq=x,你听得到么,我想建立连接(SYN=1),我的序号是x(seq=x)
  • 服务器:对请求进行确认,也就是回应,我听到了(ACK=1,ack=x+1),你听得到么(SYN=1),我的序号是y(seq=y)
  • 客户端:对服务器的回应进行确认,我听到了(ACK=1,ack=y+1),我的序号是x+1
    IP数据报经过运输层需要分段发送,所以在TCP的处理过程中,有序号的概念

比如客户端说我要从666号开始,发送100个数据,服务器说,我是从888号开始回应的
上面的seq=x 和 seq=y seq=x+1(上一个seq=x,下一个自然就是seq=x+1了)都是各自的序号,握手的过程就是SYN seq ACK ack的来回确认 ,SYN ACK是头部的字段,可以理解为标志位,协议中有对他们的值有具体的规定,ack就是确认号,确认号是期望收到的对方的下一个报文段的第一个数据字节的序号,也就是收到的序号+1 ,否则随便一个,怎么对得上号

为什么要三次握手?
如果不是三次握手,只有两次
如果客户端发出请求连接时,报文延时了,于是客户端重新发送了一次连接请求消息,后来收到了确认,建立了连接,然后完成了数据传输,关闭了连接,此时,服务器收到了那个迟到的请求消息,此时他应该是个废物了,但是如果只有两次握手,服务器收到请求就响应建立了连接了,但是如果是三次,客户端不会再次确认,服务器也就随后知道了这消息有问题,不会建立连接

2、TCP四次挥手

连接建立以后就可以进行数据通信传输了。通信结束后,需要断开连接,断开连接需要四次交互,常被称为四次挥手
最初状态均为ESTABLISHED,客户端与服务器相互进行数据传送
下图假设客户端无数据发送,请求断开连接
在这里插入图片描述
断开过程

  • 客户端无数据发送时,请求关闭连接,我好了,我想断开连接了(FIN=1)我的序号是u(u就是之前传送过的所有数据的最后一个字节的序号+1),此时客户端转变为FIN-WAIT-1状态。
  • 服务器收到客户端的消息后,告诉客户端“好的,我知道了”(ACK=1,ack=u+1),这条消息的序号是v(seq=v这是服务器发送消息的序号) 此时服务器的状态就转换为了CLOSE-WAIT状态。此时,客户端通往服务器的路就断开了,客户端不能向服务器发送数据,但是服务器仍旧可以向客户端发送数据,现在是“半关闭”的状态。
  • 当客户端收到来自服务器的确认之后,进入FIN-WAIT-2状态,等待服务器那边说断开连接,等待中。当服务器所有的数据也都完全发送完成了之后,服务器才开始主动告知客户端断开连接(FIN=1,seq=w)。
  • 这中间服务器可能又继续发送了一些数据,可能是v+1 也可能发送了更多,所以设置为w
    ,并且再次发送确认信息(ACK=1,ack=u+1,因为客户端已经不能发送数据了,服务器期望收到的序号永远都是最后一个序号+1,也就是u+1)。这时,服务器就进入了LAST-ACK状态,最后确认状态。客户端收到了服务器的断开连接请求后,也需要给出确认响应(ACK=1,ack=w+1,seq=u+1),然后进入TIME-WAIT状态 。等待两个MSL后,进入关闭状态。

MSL 是Maximum Segment Lifetime英文的缩写“报文最大生存时间”,他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。

如果大家需要进一步了解运输层的其他相关知识,可以参考
CS - Notes

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值