我是靠谱客的博主 稳重小天鹅,最近开发中收集的这篇文章主要介绍探索协议栈和网卡——连接服务器1、连接是什么意思:2、负责保存控制信息的头部:3、连接操作的实际过程:,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1、连接是什么意思:

从应用程序的角度看,连接操作实际上就是调用Socket库中的connect组件,随后本地的套接字就会与服务器端的套接字连接。那么这个过程是怎么样的呢?

在套接字刚创建完的时候,是不知道通信对象是谁的。这个时候,应用程序就需要将服务器的IP地址和端口号等信息告知协议栈,这是连接操作的目的之一。

在服务器端,创建完套接字之后是不清楚客户端的具体身份的,于是,需要让客户端向服务器告知必要的信息,传达开始通信的请求,这也是连接操作的目的之一。

所以,连接实际上是通信双方交换控制信息,在套接字中记录这些必要信息并准备数据收发的一连串操作,在一定层面上我们也可以叫做准备阶段。

2、负责保存控制信息的头部:

所谓的控制信息也是有区别的,主要分为两类。

第一类是客户端和服务器相互联络时交换的控制信息。这些信息不仅仅在连接阶段需要,在数据的收发和断开阶段等整个通信过程都是需要的。例如TCP协议的规格中就有定义固定的字段来表示控制信息(TCP头部总长度20字节):

字段名称长度(比特)含义
发送方端口号16发送网络包的程序的端口号
接收方端口号16网络包的接收方程序的端口号
序号32发送方告知接收方该网络包发送的数据相当于所有发送数据的第几字节
ACK号32接收方告知发送方已经收到了所有数据的第几字节。其中ACK是acknowledge的缩写
数据偏移量4表示数据部分的起始位置,也可以认为表示头部的长度
保留6该字段为保留字段,现在未使用
控制位6

该字段中的每个比特分别表示以下通信控制含义。

URG:表示紧急指针字段有效

ACK:表示接收数据序号字段有效,一般表示数据已被接收方收到

PSH:表示通过flush操作发送的数据

RST:强制断开连接,用于异常中断的情况

SYN:发送方和接收方相互确认序号,表示连接操作

FIN:表示断开连接

窗口16接收方告知发送方窗口大小
校验和16用来检查是否出现错误
紧急指针16表示应紧急处理的数据位置
可选字段可变长度除了上面的固定头部字段之外,还可以添加可选字段,但除了连接操作之外,很少使用可选字段

每次客户端和服务器之间进行通信时,这些信息都会被添加在客户端与服务器之间传递的网络包的开头。如下图所示:

在连接阶段,由于数据收发还没有开始,所以网络包中就没有实际的数据,只有控制信息。这些控制信息也叫做头部,例如TCP头部、以太网头部、IP头部等等。

第二类是保存在套接字中,用来控制协议栈操作的信息。由应用程序和通信对象传递过来的信息都会被保存在这里,用来操作协议栈的每一步。因为不同的操作系统所对应的协议栈的实现方式也不同,所以对应的控制信息也就不相同。因此,我们从这里也可以看出,协议栈是相对自身实现来设计的,而网络协议则是大家都统一实现的一种规范。

3、连接操作的实际过程:

从客户端的connect(<描述符>, <服务器IP地址和端口号>, ...);开始,connect中调用的信息会传递给协议栈中的TCP模块,TCP模块会生成对应的控制信息,包括对应的端口号、SYN比特设置为1(表示连接)、窗口大小、序号等等。客户端创建完TCP头部之后,TCP模块会将信息传递给IP模块并委托它进行发送。当服务器的IP模块接收到数据包则将其交给TCP模块,服务器的TCP模块根据信息找到端口号对应的套接字写入信息并改为连接状态,之后服务器的TCP模块会返回响应信息,这个过程和客户端的一样之外还会设置ACK控制位为1表示已经接收到相应的网络包。然后返回到客户端,客户端在接收到信息之后如果SYN为1则表示连接成功并向对应套接字中写入服务器信息等。最后客户端还会返回一个响应数据包,和服务器端返回的数据包一样将ACK控制位设置为1表示已经接收到服务器端的响应。当服务器接收到这个响应包之后,整个连接操作才算完成。

最后

以上就是稳重小天鹅为你收集整理的探索协议栈和网卡——连接服务器1、连接是什么意思:2、负责保存控制信息的头部:3、连接操作的实际过程:的全部内容,希望文章能够帮你解决探索协议栈和网卡——连接服务器1、连接是什么意思:2、负责保存控制信息的头部:3、连接操作的实际过程:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部