详解TCP连接的建立和终止

一、 网络基础TCP/IP

TCP/IP,也就是互联网协议套件(英语:Internet Protocol Suite,缩写IPS)是一个网络通信模型,以及一整个网络传输协议家族,为网际网络的基础通信架构。
通常使用的网络(包括互联网)是在TCP/IP协议族的基础上运作的。(HTTP协议也属于它内部的一个子集)

1. TCP/IP协议族

计算机网络设备需要相互通信,双方就必须基于相同的方法。比如,如何探测到通信目标,由哪一边先发起通信、使用哪种语言进行通信,怎样结束通信等规则都需要事先确定。不同的硬件、操作系统之间的通信,所有的这一切都需要一种规则。而我们把这种规则称为协议

TCP/IP 是互联网相关的各类协议族的核心

2. TCP/IP的分层管理

TCP/IP 协议族层次分别分为以下4层:应用层、传输层、网络层和数据链路层

分层的优点:
  • 如果互联网值由一个协议统筹,某个地方需要改变设计时,就必须把所有部分整体替换掉。而分层之后只需用把变动的层替换掉即可。
  • 层次化之后,设计也变得相对简单了,处于应用层上的应用可以只考虑分配给自己的任务,而不需要弄清对方在地球上哪个地方,对方的传输线路是怎样的、能否确保传输送达等其他问题。

3. TCP/IP传输流

利用TCP/IP协议族进行网络通信时,会通过分层顺序与对方进行通信,发送端从应用层往下走,接收端则从应用层往上走。
TCP/IP传输流

  • 首先作为发送端的客户端在应用层(HTPP协议)发出一个想看某个Web页面的HTTP请求
  • 为了传输方便,在传输层(TCP协议)把应用层处收到的数据(HTTP请求报文)进行分割,并在各个报文上打上标记序号及端口号转发给网络层。
  • 在网络层(IP协议),增加作为通信目的的MAC地址后转发给链路层。这样一来,发往网络的通信请求就准备齐全了。
  • 接收端的服务器在链路层接收到数据,按序往上层发送,一直到应用层,才能算真正接收到客户端发送来的HTTP请求。
  • 发送端在层与层之间传输数据时,每经过一层必定会被打上一个该层所属的首部信息,反之,接收端在层与层传输数据时,每经过一层时会把对应的首部消去。

这种把数据信息包装起来的做法称为封装
以下是封装的流程图:
在这里插入图片描述

二、TCP/IP连接的建立与终止

下面这张图详细的介绍了TCP/IP的建立与终止

在这里插入图片描述

详解:

初始化状态

  • 服务器端和客户端初始的状态都是closed,服务器端经过socket、bind、listen进入LISTEN监听状态
  • 同理,客户端经过socket进入connect连接状态

三次握手

为了将数据准确无误的送达目标,TCP采用三次握手。

  1. 客户端首先发送一个SYN(synchronize)给服务器端,表明发送一个标有SYN的数据包
  2. 服务器端接收到SYN 并进入到 SYN_RCVD状态,同时向客户端发送标有SYN/ACK 的数据包
  3. 客户端接收到SYN/ACK 后进入ESTABLISHED状态,并向服务器端发送标有ACK 的数据包

注意

  • 为什么需要三次握手?
    因为第一次只表示客户端到服务器端建立了连接,第二次表示服务器端到客户端建立了连接,每次的连接是独立的;当确认双方连接都建立成功了之后才进行数据的传输。

数据的传输:

  • read
  • send
  • write
  • recv

四次挥手:

  1. 客户端向服务器端发送一个 FIN 请求关闭的请求,并进入FIN_WAIT1
  2. 服务器端接收到之后,进入CLOSE_WAIT,并同时向客户端发送ACK
  3. 客户端接收到ACK 后进入FIN_WAIT2, 服务器再向客户端发送FIN 请求关闭,同时服务器进入CLOSE状态
  4. 客户端接收到FIN 后 进入TIME_WAIT, 并向服务器端发送ACK,服务器接收ACK后进行关闭

注意:

  • 四次挥手为什么需要四步?
    前两次挥手用于断开一个方向的连接,后两次用于断开另一个方向的连接

  • 在第二步和第三步时,为什么ACK和FIN不同时发送,而是分步?
    当客户端向服务器端发送FIN时,如果服务器端不作出回应,客户端会一直向服务器端发送FIN,所以一定要先做出ACK回应,再做响应的处理
    然后再向服务器端再向客户端发送请求关闭的FIN,同理,客户端结接收到之后再向服务器端做出ACK响应,服务器端收到ACK响应后就进行关闭。

  • 在服务器端关闭后,为什么客户端要等待2MSL后再关闭?

    1. 服务器端向客户端发送FIN这步需要1MSL
    2. 客户端向服务器端发送ACK需要1MSL
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值