TCP/IP传输(二)
持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第19天,点击查看活动详情
连接服务器
连接
连接:表示通信双方交换控制信息,在套接字中记录这些必要信息并准备数据收发的一连串操作。
- 连接操作的目的:
(1)把服务器的 IP 地址和端口号等信息告知协 议栈。
(2)客户端向服务器传达开始 通信的请求。 - 连接操作中所交换的控制信息是根据通信规则来确定的,只要根据规则执行连接操作,双方就可以得到必要的信息从而完成数据收发的准备。
- 执行数据收发操作时,需要一块用来临时存放要收发的数据的内存空间,这块内存空间称为缓冲区——在连接操作的过程中分配的。
头部
头部是负责保存控制信息的
控制信息分为两类:
- 客户端和服务器相互联络时交换的控制信息——保存在头部。(整个通信过程中都需要,且在 TCP 协议的规格中进行了定义,这些控制信息位于网络包的开头,因此被称为头部。为了区分,一般会记作 TCP 头部、以太网头部(又称头部) 、IP 头部。)
- 套接字(协议栈中的内存空间)中记录的信息(其中应用程序传递来的信息 、从通信对象接收到的信息、收发数据操作的执行状态等信息也会保存在这里,协议栈会根据这些信息来执行每一步的操作。)
实际操作
调用Socket 库的 connect ——connect(< 描述符 >, < 服务器 IP 地址和端口号 >, …)包括以下步骤:
- 在 TCP 模块处创建表示连接控制信息的头部。
- 通过 TCP 头部中的发送方和接收方端口号可以找到要连接的套接字。
- 将头部中的控制位的 SYN 比特 设置为 1——表示连接(如果不接受连接则不设置 SYN,将 RST 比特设置为 1。)。
- 双方在通信时必须相互确认网络包是否已经送达。
- 服务器 TCP 模块会将 TCP 头部传递给 IP 模块,并委托 IP 模块向客户端返回响应。
- 网络包返回到客户端,通过 IP 模块到达 TCP 模块,并通过 TCP 头部的信息确认连接服务器的操作是否成功。
- 此时如果 SYN 为 1 则表示连接成功。
- 向套接字中写入服务器的 IP 地址、端口号等信息, 同时还会将状态改为连接完毕。
- 服务器返回响应时将 ACK 比特设置为 1,相应地,客户端也需要将 ACK 比特设置为 1 并发回服务器,表示刚才的响应包已经收到。

浙公网安备 33010602011771号