套接字中记录了通讯双方的信息以及通讯处于怎样的状态。
浏览器
链接( connect)其实是通讯双方交换控制信息。缓存
把服务器的 IP 地址和端口号等信息告知协议栈,这是链接操做的目的之一。服务器
客户端向服务器传达开始通讯的请求(包含客户端的ip,端口等信息),也是链接操做的目的之一。网络
当执行数据收发操做时,咱们还须要一块用来临时存放要收发的数据的内存空间,这块内存空间称为缓冲区,它也是在链接操做的过程当中分配的。上面这些就是“链接”这个词表明的具体含义。并发
控制信息其实能够大体分为两类:1.客户端和服务器相互联络时交换的控制信息。 2.保存在套接字中,用来控制协议栈操做的信息。spa
通讯操做中使用的控制信息分为两类。
(1) 头部中记录的信息
(2) 套接字(协议栈中的内存空间)中记录的信息对象
链接操做的第一步是在 TCP 模块处建立表示链接控制信息的头部。blog
经过 TCP 头部中的发送方和接收方端口号能够找到要链接的套接字。ip
客户端链接服务器的过程:内存
当 TCP 头部建立好以后,接下来 TCP 模块会将信息传递给 IP 模块并委托它进行发送。服务器从处于等待链接状态的套接字中找到与 TCP 头部中记录的端口号相同的套接字以后,套接字中会写入相应的信息,并将状态改成正在链接,而后,服务器的 TCP 模块会返回响应,这个过程和客户端同样,须要在 TCP 头部中设置发送方和接收方端口号以及 SYN 比特。此外,在返回响应时还须要将 ACK 控制位设为1 ,这表示已经接收到相应的网络包,而设置ACK 比特就是用来进行确认网络包是否已经送达接下来,服务器 TCP 模块会将 TCP头部传递给 IP 模块,并委托 IP 模块向客户端返回响应。而后,网络包就会返回到客户端,经过 IP 模块到达 TCP 模块,并经过 TCP 头部的信息确认链接服务器的操做是否成功。若是 SYN 为 1 则表示链接成功,这时会向套接字中写入服务器的 IP 地址、端口号等信息,同时还会将状态改成链接完毕。到这里,客户端的操做就已经完成,但其实还剩下最后一个步骤。刚才服务器返回响应时将 ACK 比特设置为 1,相应地,客户端也须要将 ACK 比特设置为 1 并发回服务器,告诉服务器刚才的响应包已经收到。当这个服务器收到这个返回包以后,链接操做才算所有完成。
数据发送的过程:应用程序在调用 write 时会指定发送数据的长度,在协议栈看来,要发送的数据就是必定长度的二进制字节序列而已。协议栈并非一收到数据就立刻发送出去,而是会将数据存放在内部的发送缓冲区中,并等待应用程序的下一段数据。
MTU(最大传输单元):一个网络包的最大长度,以太网中通常为 1500 字节。
MSS(最大分段大小):除去头部以后,一个网络包所能容纳的 TCP 数据的最大长度。下图为说明:
IP 与以太网的包收发操做
(1)路由器根据目标地址判断下一个路由器的位置
(2)集线器在子网中将网络包传输到下一个路由
集线器是按照以太网规则传输包的设备,而路由器是按照 IP规则传输包的设备,即:
(1)IP 协议根据目标地址判断下一个 IP 转发设备的位置
(2)子网中的以太网协议将包传输到下一个转发设备
TCP/IP 网络中,一个网络包从出发到到达目的地的全过程:
网络包在传输过程当中会通过集线器,集线器是根据以太网协议工做的设备。为了判断包接下来应该向什么地方传输,集线器里有一张表(用于以太网协议的表),可根据以太网头部中记录的目的地信息查出相应的传输方向。这张图中只有一个集线器,当存在多个集线器时,网络包会按顺序逐一经过这些集线器进行传输。
接下来,包会到达下一个路由器。路由器中有一张 IP 协议的表,可根据这张表以及 IP 头部中记录的目的地信息查出接下来应该发往哪一个路由器。为了将包发到下一个路由器,咱们还须要查出下一个路由器的 MAC 地址,并记录到 MAC 头部中,你们能够理解为改写了 MAC 头部。这样,网络包就又被发往下一个节点了。
网络包会经过路由器到达下一个路由器。这个过程不断重复,最终网络包就会被送到目的地,当目的地设备成功接收以后,网络包的传输过程就结束了。
无线局域网、ADSL、FTTH 等,它们均可以替代以太网的角色帮助 IP 协议来传输网络包A 。所以,将 IP 和负责传输的网络分开,能够更好地根据须要使用各类通讯技术。
IP 模块负责添加以下两个头部。
(1) MAC 头部:以太网用的头部,包含 MAC 地址
(2) IP 头部:IP 用的头部,包含 IP 地址
不管要收发的包是控制包仍是数据包,IP 对各类类型的包的收发操做都是相同的。
IP 头部的“接收方 IP 地址”填写通讯对象的 IP 地址。 发送方 IP 地址须要判断发送所使用的网卡,并填写该网卡的 IP地址。
MAC 头部是以太网使用的头部,它包含了接收方和发送方的 MAC 地址等信息。
经过 ARP 查询目标路由器的 MAC 地址:在以太网中,有一种叫做广播的方法,能够把包发给链接在同一以太网中的全部设备。ARP 就是利用广播对全部设备提问:“×× 这个 IP 地址是谁的?请把你的 MAC 地址告诉我。”而后就会有人回答:“这个 IP 地址是个人,个人 MAC 地址是××××。”若是对方和本身处于同一个子网中,那么经过上面的操做就能够获得对方的 MAC 地址。
将查询结果放到一块叫做 ARP 缓存的内存空间中留着之后用。ARP 缓存中的值在通过一段时间后会被删除,通常这个时间在几分钟左右。