继计算机网络stage1
网络是怎样连接的
第二章
-
Socket 库向协议栈发出委托的一系列操作
-
所以只要通过描述符确定了相应的套接字,协议栈就能够获取所有的相关信息,这样一来,应用程序就不需要每次都告诉协议栈应该和谁进行通信了。
-
操作系统中有一个“内存管理”模块
-
连接实际上是通信双方交换控制信息,在套接字中记录这些必要信息并准备数据收发的一连串操作
-
论何种操作系统的协议栈都是共通的
-
TCP 模块会与该 IP 地址对应的对象,也就是与服务器的 TCP 模块交换控制信
当 TCP 头部创建好之后,接下来 TCP 模块会将信息传递给 IP 模块并委托它进行发送
建立连接之后,协议栈的连接操作就结束了 -
对应英文的 Connection。也有人把连接称为“会话”(session)
-
协议栈会根据一个叫作 MTU [①] 的参数来进行判断。MTU 表示一个网络包的最大长度,在以太网中一般是 1500 字节
MSS:除去头部之后,一个网络包所能容纳的 TCP 数据的最大长度。
-
为此,协议栈的内部有一个计时器,当经过一定时间之后,就会把网络包发送出去
|判断要素就是这两个,但它们其实是互相矛盾的。如果长度优先,那么网络的效率会提高,但可能会因为等待填满缓冲区而产生延迟;相反地,如果时间优先,那么延迟时间会变少,但又会降低网络的效率。 -
发送缓冲区中的数据会被以 MSS 长度为单位进行拆分
-
通过这些信息,接收方还能够检查收到的网络包有没有遗漏。例如,假设上次接收到第 1460 字节,那么接下来如果收到序号为 1461 的包,说明中间没有遗漏
“到第 ×× 字节之前的数据我已经都收到了哦!”这个返回 ACK 号的操作被称为
确认响应
,通过这样的方式,发送方就能够确认对方到底收到了多少数据。
-
TCP 采用这样的方式确认对方是否收到了数据,在得到对方确认之前,发送过的包都会保存在发送缓冲区中。如果对方没有返回某些包对应的 ACK 号,那么就重新发送这些包。
因此,网卡、集线器、路由器都没有错误补偿机制,一旦检测到错误就直接丢弃相应的包
-
还需要将控制位中的 ACK 比特设为 1,这代表 ACK 号字段有效,接收方也就可以知道这个网络包是用来告知 ACK 号的。
SYN 是 Synchronize(同步)的缩写,意思是通过告知初始序号使通信双方保持步调一致议栈会将接收到的数据复制到应用程序指定的内存地址中