首页 > 其他分享 >TCP三次握手和四次挥手

TCP三次握手和四次挥手

时间:2023-04-10 15:44:31浏览次数:44  
标签:报文 TCP 连接 发送 四次 握手 服务端 客户端

TCP三次握手

1.1 为什么需要三次握手,两次不行吗?

第一次握手:客户端发送网络包,服务端收到了。
这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的。
第二次握手:服务端发包,客户端收到了。
这样客户端就能得出结论:服务端的接收、发送能力,客户端的接收、发送能力是正常的。不过此时服务器并不能确认客户端的接收能力是否正常。
第三次握手:客户端发包,服务端收到了。
这样服务端就能得出结论:客户端的接收、发送能力正常,服务器自己的发送、接收能力也正常。
因此,需要三次握手才能确认双方的接收与发送能力是否正常。

两次握手不可以。
如客户端发出连接请求,但因连接请求报文丢失而未收到确认,于是客户端再重传一次连接请求。后来收到了确认,建立了连接。数据传输完毕后,就释放了连接,客户端共发出了两个连接请求报文段,其中第一个丢失,第二个到达了服务端,但是第一个丢失的报文段只是在某些网络结点长时间滞留了,延误到连接释放以后的某个时间才到达服务端,此时服务端误认为客户端又发出一次新的连接请求,于是就向客户端发出确认报文段,同意建立连接,不采用三次握手,只要服务端发出确认,就建立新的连接了,此时客户端忽略服务端发来的确认,也不发送数据,则服务端一致等待客户端发送数据,浪费资源。

1.2三次握手过程中可以携带数据吗?

其实第三次握手的时候,是可以携带数据的。但是,第一次、第二次握手不可以携带数据
为什么这样呢?大家可以想一个问题,假如第一次握手可以携带数据的话,如果有人要恶意攻击服务器,那他每次都在第一次握手中的 SYN 报文中放入大量的数据。因为攻击者根本就不理服务器的接收、发送能力是否正常,然后疯狂着重复发 SYN 报文的话,这会让服务器花费很多时间、内存空间来接收这些报文。
也就是说,第一次握手不可以放数据,其中一个简单的原因就是会让服务器更加容易受到攻击了。而对于第三次的话,此时客户端已经处于 ESTABLISHED 状态。对于客户端来说,他已经建立起连接了,并且也已经知道服务器的接收、发送能力是正常的了,所以能携带数据也没啥毛病。

TCP四次挥手

TCP 连接的拆除需要发送四个包,因此称为四次挥手(Four-way handshake),客户端或服务端均可主动发起挥手动作。

2.1 挥手为什么需要四次?

因为当服务端收到客户端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当服务端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉客户端,“你发的FIN报文我收到了”。只有等到我服务端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四次挥手。
原文链接:
https://blog.csdn.net/hyg0811/article/details/102366854

标签:报文,TCP,连接,发送,四次,握手,服务端,客户端
From: https://www.cnblogs.com/XFMYT/p/17303071.html

相关文章

  • 【计算机网络-传输层】TCP 协议
    目录1传输层概述1.1传输层的功能1.2端口号2TCP报文段2.1TCP报文段首部格式2.2TCP数据传送的过程3TCP连接管理3.1TCP连接的建立——三次握手3.1.1客户机向服务器发送TCP连接请求报文段3.1.2服务器向客户机发送TCP连接请求确认报文段3.1.3客户机向服务器发送TC......
  • 【学习笔记】在windows下进行基于TCP的本地客户端和服务端socket通信
    文章目录socket介绍java中使用socket基于tcp的socket通信使用ServerSocket类创建一个web服务器:(java)windows下的基于tcp的socket编程(c++写)InetAddress类的方法附录1TCPUDP附录2websocketsocket介绍Socket的英文原义是“孔”或“插座”。在编程中,Socket被称做套接字,是网络通......
  • ubuntu离线安装tcpdump
    环境DistributorID: UbuntuDescription: Ubuntu16.04.5LTSRelease: 16.04Codename: xenial准备安装包tcpdump官网:https://www.tcpdump.org/因为ubuntu版本是16.04,所以选择了16.04推荐的版本,安装tcpdump需要提前安装libpcap。https://www.tcpdump.org/release/libpcap-1......
  • TCP/IP网络层
    网络层协议网络层功能:实现端到端主机之间的数据传输。关键词:路由(网络中选择路径);IP编址;分组转发网络层的数据单位(PDU):包packet网络层协议的两个版本:IPV4和IPV6:对比TCP/IPv4和TCP/IPv6:TCP/IPv6的网络层:没有ARP协议和IGMP,而出现了ND和MLD协议。总体目前TCP/IPv4网络层的协议有:ARP、I......
  • 在发送数据头部加上内容长度解决TCP 数据粘包
    在学习网络编程socket章节时,发现在客户端向服务器端发送数据时有时可能出现粘包的问题,因此这里记录一下通过添加数据头的方式解决粘包问题。首先什么是数据粘包?其实之所以出现粘包问题,往往是因为网络问题,或者发送端与接收端发送/接收频率不对等引起的因为TCP协议是传......
  • TCP编程
    TCP编程Java中的TCPjava对TCP协议进行了封装,客户端和服务端都使用Socket代表两个的通信端口,不过客户端使用的是Socket类,服务端使用的是ServerSocket.客户端代码示例publicclassClientDemo{publicstaticvoidmain(String[]args)throwsIOException{//创......
  • LabVIEW网口TCP通讯西门子PLC,支持200、300、1200、1500、400、SMART全系列
    LabVIEW网口TCP通讯西门子PLC,支持200、300、1200、1500、400、SMART全系列PLCS7协议官方工具包,常用功能一网打尽。1.命令帧读写。程序源码,命令帧文本编写,不调用dll,不安装插件,完胜OPC等。创作不易,非诚勿扰。谢谢大家。YID:6787669089987972......
  • tcp序列号和确认号
     http://blog.chinaunix.net/uid-20665441-id-305478.html详细解释为:先把TCP协议的序列号搞清楚:1、开始C端随机生成初始sequence(C),发到S,flag为syn (eg.Seq(C)=0)2、S端回应C端,也随机生成初始sequence(S) eg.Seq(S)=0,ack=sequence(C)+1,表示收到C端的连接请求,flag为syn+ack(e......
  • “当高启强遇到陈书婷”与TCP协议
    大家是否经常听别人提起TCP协议的三次握手和四次挥手呢?......
  • TCP/IP和OSI的基础层级关系图,TCP/IP四层模型关系,TCP/IP和HTTP/HTTPS的关系图
    TCP/传输控制协议英文全称TransmissionControlProtocol。IP/网际互连协议英文全称InternetProtocol。tcp和ip是互联网众多通信协议中最为著名的。1.OSI参考模型与TCP/IP的关系计算机网络分层模型OSI七层模型TCP/IP四层模型TCP/IP五层模型应用层应用层应用层......