<网络是怎样连接的>看书笔记第二章 用电信号传输TCP/IP--探索协议栈和网卡

2.1创建套接字

2.1.1协议栈的内部结构

在这里插入图片描述

浏览器丶邮件等一般应用程序收发数据时用TCP;DNS查询等收发较短的控制数据时候用UDP

2.12套接字的实体就是通信控制信息

在协议栈的内部有一块用于存放控制信息的内存空间,这里记录了用于控制通信操作的控制信,例如通信对象的IP地址丶端口号丶通信操作的进行状态等. 本来套接字就不存在实体,如果一定要赋予它实体的话,我们可以说这些控制信息就是套接字的实体,或者说存放控制信息的内存空间就是套接字的实体.

协议栈是根据套接字中记录的控制信息来工作的.

套接字内容:如图 图中只显示了部分内容
在这里插入图片描述

2.1.3调用socket时的操作

在这里插入图片描述

创建套接字时,首先分配一个套接字所需的内存空间,然后向其中写入初始状态

2.2连接服务器

2.21 连接是什么意思

话说,以太网的网线都是一直连接状态,我们并不需要拔插网线,那么连接是什么意识呢?
答:连接实际上是通信双方交换控制信息,在套接字中记录这些必要信息并准备数据收发的一连串操作,在讲解具体过程之前,我们先来说一说
"连接"到底是什么意思.
因为浏览器知道通信对象的信息(端口号 IP等信息),但是在调用socket创建套接字的时候这些信息并没有传递给协议栈.因此,我们需要把服务器的IP地址和端口号等信息告知协议栈,这是连接操作的目的之一
客户端向服务器传达开始通信请求,也是连接操作的目的之一.

控制信息:就是用来控制数据收发操作所需的一些信息,IP地址和端口号就是典型的列子.

补充:当执行数据收发操作时,我们还需要一块用来临时存放要收发的数据的内存空间,这块内存空间称为缓冲区,他就是在连接操作的过程中分配的.

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

2.3收发数据

2.31将HTTP请求消息交给协议栈

流程控制语句connect回到应用程序后,接下来就进行数据收发阶段了.
数据收发操作:从应用程序中调用write将要发送的数据教给协议栈开始的(图2.3圈3),协议栈收到数据后执行发送操作.
图2.3
图2.3
协议栈不是收到数据就发送,一般需要先积累一定量的数据再发出去.积累多少根据不同种类和版本的操作系统会有所不同,不能一概而论.需要下面几个要素判断
1.第一个判断每个网络包能容纳的数据长度,协议栈会根据一个叫做MTU的参数进行判断.一般1500字节(是包含头部的总长度) 当从应用程序收到的数据长度超过或者接近MSS时在发送出去,就可以避免发送大量小包的问题.
2.时间:协议栈有一个计时器,当经过一定时间之后,就会把网络包发送出去(以毫秒为单位计算)
发送是综合考虑以达到平衡.
如果仅靠协议栈来控制发送时机,可能会带来一些问题,因此协议栈也给应用程序保留了控制发送时机的余地.(比如如果制定"不等待填满缓冲区直接发送",则协议栈就会按照要求直接发送数据 一般像浏览器这样会话型应用程序,等待填满缓冲区导致的延迟会产生很大的影响,因此一般会采用直接发送选项)

MTU : 一个网络包的最大长度,以太网中一般为1500字节

MSS:除去头部之后,一个网络包所能容纳的TCP数据的最大长度

对较大的数据进行拆分

在这里插入图片描述
请求消息一般不会太长,一个网络包就能装下,但是如果要提交表单数据,长度就可能超过一个网络包所能容纳的数据量.

猜你喜欢

转载自blog.csdn.net/mogbox/article/details/109606485