首页 > 系统相关 >在Linux中,如何理解Tcp/ip协议三次握手?

在Linux中,如何理解Tcp/ip协议三次握手?

时间:2024-03-13 09:23:13浏览次数:25  
标签:ACK ip 握手 SYN Tcp ISN Linux 服务器 客户端

在Linux(以及其他支持TCP/IP协议的操作系统)中,TCP(Transmission Control Protocol,传输控制协议)为了建立一个可靠的数据传输连接,采用了三次握手(Three-way Handshake)的过程来初始化连接。以下是TCP三次握手的详细步骤和解释:

  1. 第一次握手(SYN)

    • 客户端(Client)想要与服务器(Server)建立连接时,它会随机生成一个初始序列号(ISN),并发送一个SYN(同步)段给服务器,请求建立连接。此消息中包含了客户端的初始序列号(ISN_C)。
    Client -> Server: SYN (ISN_C)
    

    这个阶段客户端的状态变为SYN_SENT

  2. 第二次握手(SYN+ACK)

    • 服务器接收到客户端的SYN消息后,会回复一个SYN+ACK消息。服务器会确认客户端的SYN(即ACK(Acknowledgment)字段填入ISN_C + 1),同时也会生成自己的初始序列号(ISN_S),并将其包含在SYN消息中发送给客户端。
    Server -> Client: SYN (ISN_S), ACK (ISN_C + 1)
    

    此时,服务器进入SYN_RECEIVED状态。

  3. 第三次握手(ACK)

    • 客户端收到服务器的SYN+ACK消息后,确认服务器的SYN(ACK字段填入ISN_S + 1),并向服务器发送一个ACK消息,表示客户端同意建立连接。
    Client -> Server: ACK (ISN_S + 1)
    

    客户端收到服务器的ACK确认后,连接正式建立,客户端和服务器的状态都转变为ESTABLISHED

综上所述,通过三次握手,双方能够互相确认对方的接收能力和发送能力,并且协商了一套双方都认可的初始序列号,以便后续数据传输时进行校验和避免数据丢失。在三次握手过程中,双方都得到了一次相互的确认,保证了连接的可靠性。只有当三次握手全部完成后,客户端和服务器才会开始交换数据。

标签:ACK,ip,握手,SYN,Tcp,ISN,Linux,服务器,客户端
From: https://www.cnblogs.com/huangjiabobk/p/18069848

相关文章

  • Python爬取免费IP代理时,无法解析到数据
    大家好,我是Python进阶者。一、前言前几天在Python最强王者交流群【ZXS】问了一个Python网络爬虫实战问题。问题如下:我这里遇到一个问题:【爬取免费IP代理时,无法解析到数据】,我通过xpath,css定位到了元素,但是在运行时返回空列表,请问我该怎么解决呀以下是解析数据的截图:他自......
  • 【网络基础学习之一】OSI参考模型与TCP/IP协议
    一.分层思想1.分层背景OSI(OpenSystemsInterconnection,开放式系统互联)是国际标准化组织(ISO)在20世纪80年代制定的一种通信协议的通信模型,主要用于计算机网络中,规定了计算机系统之间通信的标准方法和协议。2.分层优点各层之间相互独立,每一层只实现一种相对独立的功能,使问题复......
  • Linux软件高级编程-网络--TCP通信--day14
    TCP包头:1.序号:发送端发送数据包的编号2.确认号:已经确认接收到的数据的编号(只有当ACK为1时,确认号才有用)TCP为什么安全可靠:1.在通信前建立三次握手连接  SYN    SYN+ACK    ACK 2.在通信过程中通过序列号和确认号保障数据传输的完整性  本次......
  • Windows下使用winsock库实现tcp客户端通信,C/C++
    编程思路第一步创建一个WASDATA结构体变量,用于存储关于Winsock库的信息;初始化Winsock库。第二步创建TCP套接字。第三步创建sockaddr_in结构体变量,用于储存服务器地址信息。里面包括设置地址族、IP地址、端口号。第四步调用connect函数连接服务器。通信调send函数发送数......
  • 安装JDK11+Tomcat10.0.1+eclipse-jee-2023-12-R-win32-x86_64 配置
    第一步,先双击启动软件:改一下名称:C:\Users\Administrator\eclipse-workspace变成:C:\ProgramFiles\JavaJava:为什么JSP文件要放到SpringBoot工程的src/main/webapp目录下参考文章:https://blog.csdn.net/netyeaxi/article/details/100928105为了看到更具体的页面,可以做个性化......
  • eclipse连接hana数据库修改端口号
    在Eclipse中连接SAPHANA数据库时,如果需要修改端口号,你需要在JDBC连接URL中指定正确的端口。JDBC连接URL通常遵循以下格式:jdbc:sap://<hostname>:<port>/[<instance_number>]?currentschema=<schema_name>在这个URL中:<hostname>是SAPHANA数据库服务器的地址。<port>是SAP......
  • zabbix直接ip访问web前端
    1、修改配置文件, sudovim/etc/apache2/sites-available/000-default.conf把之前的DocumentRoot/var/www/html这行注释掉,另起一行输入 DocumentRoot/usr/share/zabbix 2、重启Apache、zabbix-server服务sudosystemctlrestartapache2.servicezabbix-server.serv......
  • [ Linux ] Jellyfin 账户被锁定如何解锁
    https://www.cnblogs.com/yeungchie/当管理员账户也被锁定的时候该如何解锁?修改sqlite数据库sqlite3/config/data/jellyfin.dbUPDATEUsersSETInvalidLoginAttemptCount=0WHEREUsername='LockedUserName';UPDATEPermissionsSETValue=0WHEREKind=2ANDU......
  • D. Divide by three, multiply by two
    https://codeforces.com/contest/977/problem/Dvoidsolve(){intn;cin>>n;vector<pair<int,longlong>>a(n);for(auto&[x,y]:a){cin>>y;x=0;longlongtemp=y;while(......
  • AWS 入门实践-远程访问AWS EC2 Linux虚拟机
    远程访问AWSEC2Linux虚拟机是AWS云计算服务中的一个基本且重要的技能。本指南旨在为初学者提供一系列步骤,以便成功地设置并远程访问他们的EC2Linux实例。包括如何上传下载文件、如何ssh远程登录EC2虚拟机。一、创建一个AWSEC2Linux虚拟机 创建一个AmazonEC2Linux虚......