• TCP/IP协议和三次握手四次挥手


    TCP/IP 是一个四层体系结构,它包含:应用层,运输层,网际层和网络接口层。

    应用层:通过应用进程间的交互来完成特定网络进程的应用。应用层协议定义的是应用进程间的通信和交互规则。

    运输层:负责向两台主机进程之间的通信提供通用的数据传输服务。应用进程利用该服务传送应用层报文。

    网络层:选择合适的网间路由和交换节点,确保计算机通信的数据及时传送。

    数据链路层:两台主机之间传输数据,总是在一段一段的链路上传送,需要使用专门的链路层协议。

    物理层:实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异。

    什么是TCP?

    TCP其实一种面向连接的、可靠的、基于字节流的传输层通信协议,在发送数据前双方必须建立一种连接。所谓连接就是服务端和客户端保存的关于对方的一份信息,包含IP地址或者端口号等。

    一个TCP连接由一个4元组构成,分别是两个IP地址和两个端口号。一个TCP连接通常分为三个阶段:连接、数据传输、退出(关闭)。通过三次握手建立一个链接,通过四次挥手来关闭一个连接

    三次握手:三次握手的本质是确认通信双方收发数据的能力。

    第一次握手:客户端要向服务端发起连接请求,首先客户端随机生成一个起始序列号ISN(比如是100),那客户端向服务端发送的报文段包含SYN标志位(也就是SYN=1),序列号seq=100。

    第二次握手服务端收到客户端发过来的报文后,发现SYN=1,知道这是一个连接请求,于是将客户端的起始序列号100存起来,并且随机生成一个服务端的起始序列号(比如是300)。然后给客户端回复一段报文,回复报文包含SYN和ACK标志(也就是SYN=1,ACK=1)、序列号seq=300、确认号ack=101(客户端发过来的序列号+1)。

    第三次握手:客户端收到服务端的回复后发现ACK=1并且ack=101,于是知道服务端已经收到了序列号为100的那段报文;同时发现SYN=1,知道了服务端同意了这次连接,于是就将服务端的序列号300给存下来。然后客户端再回复一段报文给服务端,报文包含ACK标志位(ACK=1)、ack=301(服务端序列号+1)、seq=101(第一次握手时发送报文是占据一个序列号的,所以这次seq就从101开始,需要注意的是不携带数据的ACK报文是不占据序列号的,所以后面第一次正式发送数据时seq还是101)。当服务端收到报文后发现ACK=1并且ack=301,就知道客户端收到序列号为300的报文了,就这样客户端和服务端通过TCP建立了连接。

    简而言之,三次握手:

    1.客户端向服务器发送一个建立连接的请求

    2.服务器接到请求后发送同意连接的信号

    3.客户端接到同意连接的信号后,再次向服务器发送了确认信号,然后客户端与服务器的连接建立成功

    四次挥手:目的是关闭一个链接

    第一次挥手:当客户端的数据都传输完成后,客户端向服务端发出连接释放报文。

    第二次挥手:服务端收到客户端发的FIN报文后给客户端回复确认报文。

    第三次挥手:服务端将最后数据(比如50个字节)发送完毕后就向客户端发出连接释放报文。

    第四次挥手:客户端收到服务端发的FIN报文后,向服务端发出确认报文。而服务端一旦收到客户端发出的确认报文就会立马释放TCP连接,所以服务端结束TCP连接的时间要比客户端早一些。

    参考:https://blog.csdn.net/ThinkWon/article/details/104903925

  • 相关阅读:
    Php排序
    php导出excel表
    yii的多表查询
    MySQL中自定义排序
    jquery中的obj.attr()和obj.data
    PhpStorm快捷键
    记2019年目标之一没有996的大数据分析BI实战历程
    2018年传统公司技术部门技术变迁和2019展望
    mpvue微信小程序开发随笔
    docker toolbox的redis 配置主从及哨兵模式保证高可用
  • 原文地址:https://www.cnblogs.com/liumcb/p/13633809.html
Copyright © 2020-2023  润新知