首页 > 其他分享 >第二章:用电信号传输TCP/IP数据-02-连接:connect()

第二章:用电信号传输TCP/IP数据-02-连接:connect()

时间:2023-05-07 11:15:07浏览次数:39  
标签:02 IP 通信 信息 TCP 服务器 接字 连接 客户端

一、连接是什么意思

话说网线一直插着,网络一直连着,网线中随时都有信号流过,那这个“连接”是连接什么呢?
可以类比人与人之间的联系,满大街都是人,身边随时有人走过,我们算是跟任何人有联系吗?当然没有!
怎么才算有联系?先要双方有交往意愿,然后互换个名片,这才算联系上了。
哪天一方找到另一方说吃个饭,另一方一看这人我认识,行答应吧,这是交往。
整个过程是有意愿-互换名片(有联系)-交往。
可以看出,互换过名片才算有联系,有联系是交往的前提。
放到客户端和服务器的通信上,“互换名片”就是连接,连接是通信的前提。
那它们的名片是什么?就是通信控制信息。
所以,这里的“连接”实质上就是通信双方交换控制信息

回顾上一章的内容:浏览器先是解析URL并生成了HTTP消息,然后通过DNS解析器查到了服务器的IP地址,按照规则,也知道了该使用哪个端口,然后创建了套接字。
服务器那边当然也是,上一章也讲过,服务器一启动就会创建套接字等待客户端连接。
到这里,客户端这边的套接字里已经有了通信对象的信息,但是还没有传递给协议栈;服务器那边的协议栈创建了套接字,同样不知道要和谁通信,连应用程序(服务器程序)也不知道通信对象是谁。
这样下去,永远也没办法开始通信。
就像两人交往,都不主动,那永远都不会开始。
于是,就需要有一方主动,主动的一方理所应当的是客户端。
不像人类那么矜持,客户端不要客套,直接告知服务器自己的交往意愿并递上名片就可以了,比如:“我想和你开始通信,我的IP地址是XXXXXX,我的端口号是XX”。
由此可见,客户端向服务器传达开始通信的请求也是连接操作的目的之一。

总结:
连接实际上是通信双方交换控制信息,在套接字中记录这些必要信息并准备数据收发的一连串操作,像上面提到的客户端将IP地址和端口号告知服务器的过程就是交换控制信息的一个例子。
所谓控制信息,就是用来控制数据收发操作的信息,除了IP地址和端口号,还有其他一些控制信息。
连接操作中所交换的信息是根据通信规则来确定的,只要根据规则进行连接操作,双方就可以得到必要的信息从而完成数据收发准备。
当执行数据收发操作时,还需要一块用来临时存放要收发的数据的内存空间,这块内存空间成为缓冲区,它也是在连接操作的过程中分配的。

连接这一节就为解答一个问题:“当应用程序调用connect时发生了什么?”

为什么要使用“连接”这个词?
通信技术的历史已经有100多年,从通信技术诞生之初到不远的过去,电话技术一直都是主流。
而电话的操作过程分为三个阶段:1、拨号与对方连接。2、通话。3、挂断。
人们将电话的思路套用在现在的计算机网络中,所以也就自然而然地将通信开始之前的准备操作称为“连接”。
如果“连接”这个词顾名思义起来不通顺,用“准备”这个词来替换也可以。

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

前面说的控制信息可以分为两类。
第一类是客户端和服务器相互联络时交换的控制信息。
第二类是保存在套接字中用来控制协议栈操作的信息。

第一类:客户端和服务器通信时交换的控制信息


这些字段是固定的,在连接、收发、断开等各个阶段,每次客户端和服务器进行通信都需要提供这些控制信息。
这些内容在TCP协议的规格中进行了定义,如上图所示。表中仅列出了必需字段,此外还有一些可选字段。

如上图 a 所示 ,这些信息会被添加在客户端与服务器之间传递的网络包的开头。
在连接阶段,由于数据收发还没有开始,所以如图 b 所示,网络包中没有实际的数据,只有控制信息。
所有的控制信息都位于网络包的开头,因此被称为头部。

以太网和IP也有自己的控制信息,为避免混淆,一般记作TCP头部、以太网头部(又称MAC头部)、IP头部。

客户端和服务器在通信中会将必要的信息记录在头部并相互确认,如下:
发送方:开始发送数据
接收方:请继续
发送方:现在开始发送的是xxx号数据
接收方:xxx号数据已收到
……

正是有了这样的交互过程,双方才能够进行通信。
头部的信息非常重要,了解了头部各个字段的含义,就等于理解了整个通信的过程。

第二类:套接字中用来控制协议栈操作的信息

这些信息保存在协议栈中的套接字内存空间中。

这个内存空间保存三种信息:
1、应用程序传递来的信息
2、从通信对象接收到的信息
3、收发数据操作的执行状态
协议栈会根据这些信息来执行每一步的操作。

可以说,套接字的控制信息和协议栈的程序本身是一体的。
协议栈具体需要哪些信息会因协议栈本身的实现方式不同而不同,但这并不会影响通信,因为协议栈中的控制信息是对内的,通信是对外的,互不干涉。只要通信时按照约定的规则将必要的信息写入头部,客户端和服务器之间的通信就能达成。
比如,Windows和Linux操作系统的内部结构不同,协议栈的实现也不同,必要的控制控制信息(第二类)也就不同,但这并不影响两种系统之间的通信。
同样地,计算机和手机之间能够通信也是这个道理。

三、连接操作的实际过程

连接操作的过程是从调用Socket库的connect开始的。
connect(<描述符>,<IP地址:端口号>...)

标签:02,IP,通信,信息,TCP,服务器,接字,连接,客户端
From: https://www.cnblogs.com/polin/p/17379002.html

相关文章

  • OpenAI CLIP 关键点 - 连接图像和文字
    标签:#CLIP#Image2Text#Text2Image#OpenAI创建时间:2023-04-2100:17:52基本原理CLIP是一个图像分类模型。准备训练数据:准备大量的文本描述和图片的训练对,然后把进行对比训练。文本描述和图片的训练对的数据获取:从互联网上获得400Million的图像文本数据对。这个规模......
  • TCP协议三次握手的原因是什么?为什么不用两次握手和4次握手?
    今天复习了TCP协议的三次握手,对上一篇C++网络编程有了更深的理解。当时考研的时候计网学过,这里再总结一下分享。网图都是截图来的,侵删。TCP协议属于传输层协议,上面的应用层协议包括HTTP、FTP之类,应用层协议是最接近用户的,每往下一层就套一层头部数据来提供给当前层协议解析。那......
  • 2023.18 星火认知大模型
    5月6日,科大讯飞正式发布星火认知大模型,宣布对外开放测试,并发布教育、办公、汽车、数字员工四大行业应用成果。星火大模型在通用能力上支持:多风格多任务长文本生成、多层次跨语种语言理解,泛领域开放式知识问答,情景式思维链逻辑推理,多题型可解析数学能力,多功能多语言代码能力。发布......
  • 2023.5.7
    1//11-62#include<iostream>3#include<fstream>4#include<string>5usingnamespacestd;6classDog7{8public:9Dog(){}10Dog(intage,intwei)11{12this->m_Age=age;13this->m_W......
  • JavaScript 笔记
    JavaScript简介JavsScript于1995年由BrendanEich用时10天写出,用于网景浏览器。最初的名字叫LiveScript,也被部分员工称为Mocha。那时Java语言很流行,出于商业化的考量,更名为JavaScript,但两者之间没有关联。最早的JS作为脚本语言给浏览器增加一些诸如鼠标跟随等交......
  • 使用 JavaScript连接Oracle 数据库(js连接oracle)
    原文链接 在建立Web交互应用程序时,一般使用JavaScript语言作为表现层,而Oracle作为背后真正的数据库。连接JavaScript和Oracle数据库需要一组技术,可以实现将JavaScript执行的数据请求发送到服务器上的Oracle数据库,这样就可以访问和操作Oracle数据库中的相关内容。 在建立Web......
  • spring 第一个例子-新建配置-02
     <?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.sprin......
  • 2023.5.6 《动手学深度学习》第3、4章
    今天继续学习《动手学习深度学习》第5章:深度学习计算、第6章:卷积神经网络,今天学到的内容主要有这两章的概念。以及实现LeNet对FashionMNIST进行分类。一、理论部分:1、概念解释:1×1卷积的作用:卷积通常用于识别相邻元素间相互作用的能力,但1×1卷积不具备该能力,其主要用于调整输......
  • 每日总结2023-05-06
    JavaWeb分层结构总结三层结构:数据访问层、业务逻辑层、界面层数据访问层即DAO,对数据库进行操作。业务逻辑层又称领域层、组件层。针对具体问题的操作,可理解为对DAO层的操作,对数据业务逻辑处理。界面层又称表示层。表示WEB相关的方式,在逻辑层完善的前提下,不论表示层如何更......
  • 2023-05-06:X轴上有一些机器人和工厂。给你一个整数数组robot,其中robot[i]是第i个机器
    2023-05-06:X轴上有一些机器人和工厂。给你一个整数数组robot,其中robot[i]是第i个机器人的位置再给你一个二维整数数组factory,其中factory[j]=[positionj,limitj]表示第j个工厂的位置在positionj,且第j个工厂最多可以修理limitj个机器人每个机器人所在的位置互不相......