不要再让TCP协议及三次握手、四次挥手掉分了

网络协议模型

网络中的网络协议模型共有两种:一种是网络标准 OSI/ISO七层协议模型,一种是使用普遍 TCP/IP五层协议模型。上图就是 OSI/IOS七层协议模型。其实这两种都差很少, TCP/IP五层协议模型是把 OSI/IOS七层模型的上三层合并成为了应用层。

数据在网络上的传输过程

在网络传输上共有两个角色:客户端和服务端。客户端发送请求,服务端响应请求。网络请求在网络协议模型上是一个拆包和封包的过程。服务器

过程以下微信

  1. 数据发送端每通过一层都会封装上这层协议的协议头部向下传输。例如:对于网络请求来讲,在应用层封装上HTTP的头部转换成报文,在传输层封装上TCP头部转换成数据包,在网络层封装上IP的头部转化成IP数据报,在数据链路层加上MAC地址封装成帧,而后在物理层转换成比特流进行传输。
  2. 在物理层传输过程当中若是遇到交换机和路由器。遇到交换机把比特流转换成帧,根据交换机所指MAC地址从新封装成帧再向下转换进行传输;遇到路由器拆包到网络层,根据路由策略决定向下传的IP地址再进行向下封装传输。
  3. 通过万里长征终于到达服务器,会在网络协议模型中把第一步骤一一拆解开,最终拿到数据。响应过程当中仍是这么一套过程。

数据通讯的三种基本方式

写到这内心一凉,慌的拿起个人计算机网络书看了看....网络

单向通讯

单向通讯又称单工通讯,即只能有一个方向的通讯而没有反方向的交互。好比:无线电广播、电视广播这种。socket

双向交替通讯

双向交替通讯又称半双工通讯,即通讯的双方均可以发送信息,但不能同时发送(固然也不能同时接收)。这种通讯方式是一方发送另外一方只能接受,等发送的一方不发了,接收的一方才能够发送。好比:对讲机等。tcp

双向同时通讯

双向同时通讯又称全双工通讯,即通讯的双方均可以同时发送和接受信息。显然,双向通讯的传输效率最高。TCP就是全双工通讯。计算机网络

说了这么多(其实也很少),主要仍是要聊聊传输层TCP协议。3d

TCP

TCP协议的特色

  1. TCP是面向链接的传输层协议
  2. 每一条TCP协议只能有两个端口
  3. TCP提供数据的可靠交付服务
  4. TCP是全双工通讯
  5. 面向字节流

TCP头部

TCP头部共有20字节的数据,以下图:指针

  • 0-4:咱们都知道TCP协议是保证端到端可靠传输,首先是4个字节的目的端口和源端口
  • 4-8:Sequence Number (发包的顺序号)
  • 8-12:Acknowledgment Number (应答号,不一样的应答号表明者不一样的指令,标记这次动做)
  • 12-16:标记位,偏移量,时间窗口等等
  • 16-20:Checksum(校验码)、Urgent Pointer(偏移指针)
  • TCP Options TCP内置的命令(FIN,SYN就在这里)。
  • 上层数据

socket套接字

上面说到TCP的特色的时候说道每一条TCP只能有两个端口,这端口不是别的,就是套接字端口。code

套接字接口的格式:cdn

socket = {IP地址 : 端口号}

三次握手、四次挥手

为何三次握手、四次挥手?

TCP保证的是应用程序之间端到端的可靠传输。要想可靠就必需要有这个机制。

三次握手

先来张好玩的图

三次握手总结以下:

  1. 客户端对服务端说:Hi,你能收到我发的信息吗?
  2. 服务器对客户端说:我能收到,你能收到我发的吗?
  3. 客户端对服务器说:我也能收到。

是否是很是好理解,再来个详细。

  • 开始的时候客户端和服务器的TCP链接都处于CLOSE状态。当要链接的时候,客户端为主动打开,服务端为被动打开。
  • 一开始服务端服务器进程首先建立传输控制模块TCB(这其中保存了链接重要的信息),而后服务端就处于LISTEN状态。
  • 客户端向服务器发送一个SYN=1,seq=n(SYN=1,创建链接的标志,seq为头部的序号位)的数据包,此时客户端进入SYN_SENT状态(链接请求已发送)。
  • 服务端接收到客户端发来的请求时,会向客户端发送确认而且请求客户端创建链接(SYN=一、ACK=一、seq=k,ack=n+1),此时服务端进入SYN_RCVD状态(链接请求收到)
  • 客户端接收到服务器的确认后,而且还要向服务器发送确认,(ACK=1,seq=n+1,ack=k+1),此时TCP创建链接,客户端状态变为EXTABLISHED(已链接状态)
  • 服务端接受到客户端的确认以后,一样也进入EXTABLISHED(已链接状态)。三次握手完毕
四次挥手

在这次聊天过程当中,忽然双方起了争执。

四次挥手总结以下:

  1. 客户端对服务端说:我不想听你说话了,不和你聊了(此时客户端已经把手机扔一边了)。
  2. 服务端对客户端说:你不想听,我也要说(服务端直男癌犯了,服务端说啥客户端都看不到)。
  3. 服务端对客户端说:我也不想和你说话了,冷战吧。
  4. 客户端对服务端说:好,冷战就冷战,而后双方删了微信。

  • 开始处于数据传输过程当中,双方状态为ESTABLISHED。
  • 首先客户端向服务端发送FIN=1,seq=x(FIN=1是断开链接的标志)的数据包,进入FIN_WAIT1状态(终止等待1)。
  • 服务端接受到客户端的请求,由于服务端这边还要收场,因此先应答客户端,进入CLOSE_WAIT状态(关闭等待)。此时TCP通讯就进入到了半关闭状态。
  • 客户端接收到服务端返回的肯定进入FIN_WAIT2状态(终止等待2).
  • 服务端处理好本身的事情以后,向客户端发送一个FIN=1的包,进入LAST_ACK(最后确认)状态。
  • 客户端接收到服务端发送的关闭链接的包,并返回个服务端确认。进入TIME_WAIT(时间等待)状态,此时TCP链接尚未释放点,必需要通过时间等待计数器设置的时间以后(2MSL),才会进入CLOSED(关闭)状态。
  • 服务端接受到客户端的确认以后,进入CLOSED(关闭)状态。
  • 客户端时间等待计数器结束以后进入CLOSED(关闭)状态。TCP链接释放。

Over!

原文链接:TCP协议及三次握手、四次挥手

相关文章
相关标签/搜索