1、传输层概述

  • 在OSI参考模型中,网络层是面向通信的最高层但同时也是面向用户程序的最底层。
  • 传输层的主要作用:
    • 复用:在发送端,多个应用程序公用一个传输层;
    • 分用:在接收端,传输层把从网络层接收到的数据报拆掉IP报头之后依据端口号分派给不同的应用程序
  • 传输层和网络层的主要区别:
    • 网络层为不同主机提供通信服务,而传输层为不同主机的不同应用程序提供通信服务;
    • 网络层指对报文头部进行差错检验,而传输层会对整个报文进行差错检验

2、TCP协议的特点

  • 面向连接的:双方通信之前需要建立连接,通信完成之后还要释放连接
  • 提供可靠的数据交付服务:TCP协议提交的数据保证和发送方发送的数据是完全一致的
  • 提供点到点的通信服务
  • TCP传输是面向字节流的,传输过程中数据被划分成一个个的数据报,但这只是为了传输方便
  • TCP是全双工通信,通信双方都能作为发送端发送数据,也能作为接收端接收数据

3、三次握手:当TCP协议中通信双方建立连接的过程称之为三次握手

备注:在TCP协议中,主动发起请求的一方成为客户端,被动接收请求的一方为服务端,但不管是客户端还是服务端,TCP连接建立完成之后都能发送和接收数据。起初,服务器和客户端都为CLOSED状态。在通信开始前,双方都得创建各自的传输控制块(TCB)。服务器创建完TCB后遍进入LISTEN状态,此时准备接收客户端发来的连接请求。

第一次握手:客户端向服务端发送一个建立连接的请求报文,此时的报文头部信息中SYN=1,ACK=0,seq=x,请求报文发送之后客户端便进入了SYN-SENT状态。

  • SYN=1,ACK=0表示该报文段为连接请求报文。
  • x为本次TCP通信的字节流的初始序号。

第二次握手:服务端收到客户端的连接请求的报文后,如果同意连接,则会向客户端发送一个应答报文:SYN=1,ACK=1,seq=y,ack=x+1

服务端在发送完这个报文之后就进入了SYN-RCVD状态。

  • SYN=1,ACK=1表示该报文段为连接同意的应答报文
  • seq=y表示服务端作为发送者时,发送字节流的初始序号。
  • ack=x+1表示服务端希望下一个数据报发送序号从x+1开始的字节。

第三次握手:当客户端收到服务端的连接同意的应答报文后,还要向服务端发送一个确认报文段,表示:服务端发送的连接请求的应答报文已经成功收到。

4、四次挥手:当TCP协议中通信双方释放连接的过程称之为四次挥手

备注:TCP连接是双向的,所以前两次挥手用于断开一个方向的连接,后两次回收用于断开一个方向的连接。

第一次挥手:

  当A认为发送给B的数据已经全部发送完毕,则A主动向B发送释放连接的请求报文,此时,A将进入FIN-WAIT-1状态。

第二次挥手:

  当B接收到A发送的请求断开连接的报文之后,会通知相应的程序从A发送到B的数据已经全部完成,并且从A到B的连接将会断开。此时的B将进入 CLOSE-WAIT状态,并且会向A发送同意断开连接的应答报文。

  A收到该应答之后,进入FIN-WAIT-2状态,等待B发送连接释放请求。

  第二次挥手完成后,A到B方向的连接已经释放,B不会再接收数据,A也不会再发送数据。但B到A方向的连接仍然存在,B可以继续向A发送数据。

第三次挥手:

  当B向A发送完所有的数据之后,B会向A发送连接释放的请求。此时的B便进入LAST-ACK状态。

第四次挥手:

  A收到释放请求后,向B发送确认断开连接的应答报文,此时A进入TIME-WAIT状态。该状态会持续2MSL时间,若该时间段内没有B的重发请求的话,就进入CLOSED状态,撤销TCB。当B收到确认应答后,也便进入CLOSED状态,撤销TCB。

5、为什么连接建立需要三次握手,而不是两次握手?

防止失效的连接请求报文段被服务端接收,从而产生错误。

  若建立连接只需两次握手,客户端其实并没有太大的变化,仍然需要在获得服务端的应答后才进入ESTABLISHED状态,而服务端在收到连接请求后就进入ESTABLISHED状态。如果在客户端发送连接请求的时候网络拥塞,客户端发送的连接请求迟迟到不了服务端,客户端便会超时重发请求,此时如果服务端正确接收连接请求并确认应答,双方便开始通信,通信结束后释放连接。

  此时如果那个失效的连接请求抵达了服务端,由于只有两次握手,服务端收到请求就会进入ESTABLISHED状态,等待接收数据或主动发送数据,但此时的客户端早已进入CLOSED状态,服务端将会一直等待下去,这样浪费服务端连接资源。

6、为什么A要先进入TIME-WAIT状态,等待2MSL时间后才进入CLOSED状态?

  为了保证第四次挥手之后B能够接收到A的确认应答的报文。 因为A发完确认应答报文后直接进入CLOSED状态,那么如果该应答丢失,B等待超时后就会重新发送连接释放请求,但此时A已经关闭了,不会作出任何响应,因此B永远无法正常关闭。

TCP(控制传输协议)详解的更多相关文章

  1. netty系列之:kequeue传输协议详解

    目录 简介 KQueueEventLoopGroup KQueueEventLoop KQueueServerSocketChannel和KQueueSocketChannel 总结 简介 在前面的章 ...

  2. TCP之四:TCP 滑动窗口协议 详解

    滑动窗口机制 滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口:同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口.发送窗口和接收窗口的序号的 ...

  3. 计算机网络——TCP与UDP协议详解

    根据应用程序的不同需求,运输层需要两种不同的运输协议,即面向连接的TCP和无连接的UDP. TCP:传输控制协议 TCP特点: 1)TCP是面向连接的运输层协议.所以,应用程序在使用TCP协议之前,必 ...

  4. 快来体验快速通道,netty中epoll传输协议详解

    目录 简介 epoll的详细使用 EpollEventLoopGroup EpollEventLoop EpollServerSocketChannel EpollSocketChannel 总结 简 ...

  5. 流媒体传输协议详解之---RTSP认证

    from:http://blog.csdn.net/machh/article/details/52121648 Rtsp认证主要分为两种:   基本认证(basic authentication)和 ...

  6. TCP协议详解

    TCP协议详解 一.TCP协议 1.TCP 通过以下方式提供可靠性: ·  ◆ 应用程序分割为TCP认为最合适发送的数据块.由TCP传递给IP的信息单位叫做报文段. ·  ◆ 当TCP发出一个报文段后 ...

  7. 【转载】TCP /IP协议详解

    首先,TCP/IP不是一个协议,而是一个协议族的统称. 里面包括了IP协议,IMCP协议,TCP协议,以及http.ftp.pop3协议等等. TCP/IP协议分层 提到协议分层,我们很容易联想到IS ...

  8. 第3章 TCP协议详解

    第3章 TCP协议详解 3.1 TCP服务的特点 传输协议主要有两个:TCP协议和UDP协议,TCP协议相对于UDP协议的特点是 面向连接使用TCP协议通信的双方必须先建立连接,完成数据交换后,通信双 ...

  9. TCP协议详解7层和4层解析(美团,阿里) 尤其是三次握手,四次挥手 具体发送的报文和状态都要掌握

    如果想了解HTTP的协议结构,原理,post,get的区别(阿里面试题目),请参考:HTTP协议 结构,get post 区别(阿里面试) 这里有个大白话的解说,可以参考:TCP/IP协议三次握手和四 ...

  10. TCP协议详解(理论篇)

    TCP协议详解(理论篇) 2012-08-20      0个评论       作者:陈立龙 收藏    我要投稿 TCP协议详解(理论篇)   1.    与UDP不同的是,TCP提供了一种面向连接 ...

随机推荐

  1. JS判断页面是在浏览器还是微信打开

    一.Navigator对象 1.获取用户的浏览器信息. let ua = navigator.userAgent.toLowerCase(); 打印一下ua的结果: Mozilla/5.0 (Maci ...

  2. day04 流程控制

    在python中流程控制主要有三种:顺序流程.分支流程.循环流程 1.顺序流程:在宏观上,python程序的运行就是自上而下的顺序流程: 2.分支流程:分支流程主要是  if...else....流程 ...

  3. json中的json.dumps()

    Json简介 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于JavaScript(Standard ECMA-262 3rd Edition - ...

  4. MSYS 编译 nginx rtmp-module

    1. 下载源码 http://hg.nginx.org/nginx nginx-c74904a17021.zip https://github.com/arut/nginx-rtmp-module n ...

  5. Allowed memory size of 134217728 bytes exhausted

    错误信息: Allowed memory size of 134217728 bytes exhausted (tried to allocate 65015808 bytes) 由于报错信息和数据库 ...

  6. Webpack自动化工程

    近几年,前端各种框架工具层出不穷,从两三年前还是一个jQuery搞定全站,到之后requirejs/seajs,node,gulp/webpack,Angular/React/Vue,RN/weex的 ...

  7. 先安装VS后安装IIS,注册IIS方法

    IIS和VS安装顺序: 最好的顺序是先安装IIS,然后安装VS. 因为在安装VS的时候,安装程序会自动检测计算机上是否安装IIS,若有,则将.NET的当前版本注册到IIS,比如安装VS2010,VS2 ...

  8. centOS7在VirtualBox中装好后的网络连接问题

    1. 环境 物理机OS:Windows 7 虚拟机:VirtualBox 虚拟机OS:CentOS7 2. 虚拟机网络设置 (该部分内容参考于网络,未深究原因,待后续研究补充) 网卡1设置如下图: 网 ...

  9. .net core 利用日志查看ef生成的SQL语句

    EF Core 没有直接提供像 EF6 那样方便的在日志中记录最终生成的 SQL 的功能,可以通过官方提供的日志记录(Microsoft.Extensions.Logging)实现. 一. 使用 Mi ...

  10. SpringBoot的@Enable*注解的使用介绍

    @EnableAsync或@EnableConfigurationProperties背后的运行原理,是使用了@Import注解. @Import({User.class,Role.class,MyC ...