TCP/IP传输(二)

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第19天,点击查看活动详情

连接服务器

连接

连接:表示通信双方交换控制信息,在套接字中记录这些必要信息并准备数据收发的一连串操作。

  1. 连接操作的目的:
    (1)把服务器的 IP 地址和端口号等信息告知协 议栈。
    (2)客户端向服务器传达开始 通信的请求。
  2. 连接操作中所交换的控制信息是根据通信规则来确定的,只要根据规则执行连接操作,双方就可以得到必要的信息从而完成数据收发的准备。
  3. 执行数据收发操作时,需要一块用来临时存放要收发的数据的内存空间,这块内存空间称为缓冲区——在连接操作的过程中分配的。

头部

头部是负责保存控制信息的

控制信息分为两类:

  1. 客户端和服务器相互联络时交换的控制信息——保存在头部。(整个通信过程中都需要,且在 TCP 协议的规格中进行了定义,这些控制信息位于网络包的开头,因此被称为头部。为了区分,一般会记作 TCP 头部、以太网头部(又称头部) 、IP 头部。)

这里是引用

  1. 套接字(协议栈中的内存空间)中记录的信息(其中应用程序传递来的信息 、从通信对象接收到的信息、收发数据操作的执行状态等信息也会保存在这里,协议栈会根据这些信息来执行每一步的操作。)

实际操作

调用Socket 库的 connect ——connect(< 描述符 >, < 服务器 IP 地址和端口号 >, …)包括以下步骤:

  1. 在 TCP 模块处创建表示连接控制信息的头部。
  2. 通过 TCP 头部中的发送方和接收方端口号可以找到要连接的套接字。
  3. 将头部中的控制位的 SYN 比特 设置为 1——表示连接(如果不接受连接则不设置 SYN,将 RST 比特设置为 1。)。
  4. 双方在通信时必须相互确认网络包是否已经送达。
  5. 服务器 TCP 模块会将 TCP 头部传递给 IP 模块,并委托 IP 模块向客户端返回响应。
  6. 网络包返回到客户端,通过 IP 模块到达 TCP 模块,并通过 TCP 头部的信息确认连接服务器的操作是否成功。
  7. 此时如果 SYN 为 1 则表示连接成功。
  8. 向套接字中写入服务器的 IP 地址、端口号等信息, 同时还会将状态改为连接完毕。
  9. 服务器返回响应时将 ACK 比特设置为 1,相应地,客户端也需要将 ACK 比特设置为 1 并发回服务器,表示刚才的响应包已经收到。
posted @ 2022-06-27 20:38  Luciferpluto  阅读(1)  评论(0)    收藏  举报  来源