网络是怎样连接的 读书笔记

网络是怎样连接的 读书笔记

计算机基础理论

第一章 浏览生成消息————探索浏览器内部

浏览器需要 向 DNS 服务器查询域名对应的 IP 地址

1 条请求消息中只能写 1 个 URI。如果需要获取多个文件,必须对每个文件单独发送 1 条请求。

Socket 库是用于调用网络功能的程序组件集合。
根据域名查询 IP 地址时,浏览器会使用 Socket 库中的解析器。
DNS 服务器会从域名与 IP 地址的对照表中查找相应的记录,并返回 IP 地址。
向操作系统内部的协议栈发出委托时,需要按照指定的顺序来调用 Socket 库中的程序组件。

连接的建立过程
首先,服务器一方先创建套接字,然后等待客户端向该套接字连接管道。管道在连接时是由客户端发起的,但在断开时可以由客户端或服务器任意一方发起断开。

套接字创建完成后,协议栈会返回一个描述符,应用程序会将收到的描述符存放在内存中

描述符:应用程序用来识别套接字的机制
描述符是用来识别不同的套接字的。应用程序是通过“描述符”这一类似号码牌的东西来识别套接字的。

IP 地址和端口号:客户端和服务器之间用来识别对方套接字的机制

解析器到底是用来干什么的呢
当需要根据域名查询 IP 地址的 时候向 DNS 服务器发送查询消息

ARP 是根据已知 IP 地 址求出 MAC 地址

第二章 用电信号传输 TCP/IP 数据————探索协议栈和网卡

像浏览器、邮件等一般的应用程序都是使用 TCP 收发数据的,而像 DNS 查询等收发较短的控制数据的时候则使用 UDP。

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

创建套接字时,首先分配一个套接字所需的内存空间,然后向其中写入初始状态。
在调用 socket 创建套接字时,我们需要把服务器的 IP 地址和端口号等信息告知协议栈,这是连接操作的目的之一。
客户端向服务器传达开始通信的请求, 也是连接操作的目的之一。
之前我们讲过,连接实际上是通信双方交换控制信息(IP地址和端口号等)

通信操作中使用的控制信息分为两类。
(1) 头部中记录的信息
(2) 套接字(协议栈中的内存空间)中记录的信息

连接操作的第一步是在 TCP 模块处创建表示连接控制信息的头部
通过 TCP 头部中的发送方和接收方端口号可以找到要连接的套接字。

MTU:一个网络包的最大长度,以太网中一般为 1500 字节。 MSS:除去头部之后,一个网络包所能容纳的 TCP 数据的最大 长度。

通过“序号”和“ACK 号”可以确认接收方是否收到了网络包

网卡、集线器、路由器都没有错误补偿机制,一旦检测到错误 就直接丢弃相应的包
如果某一个包被重复发送多次,接收方可以根据序号判断出这个包是重复的,因此并不会造成网络异常。

接收方需要告诉发送方自己最多能接收多少数据,然后发送方根据这个值对数据发送操作进行控制,这就是滑动窗口方式的基本思路。

数据确认操作
首先,协议栈会检查收到的数据块和 TCP 头
部的内容,判断是否有数据丢失,如果没有问题则返回 ACK 号。然后,
协议栈将数据块暂存到接收缓冲区中,并将数据块按顺序连接起来还原出
原始的数据,最后将数据交给应用程序。

数据收发操作的第一步是创建套接字。服务器一方的应用程序在启动时就会创建好套接字并进入等待连接的状态。客户端则一般是在用户触发特定动作,需要访问服务器的时候创建套接字。

TCP 头部中包含序号,它表示当前发送的是第几个字节的数据。

TCP/IP 包包含如下两个头部:MAC 头部(用于以太网协议) (b)IP 头部(用于 IP 协议)

IP 模块负责添加如下两个头部:
(1) MAC 头部:以太网用的头部,包含 MAC 地址
(2) IP 头部:IP 用的头部,包含 IP 地址

无论要收发的包是控制包还是数据包,IP 对各种类型的包的收发操作都是相同的。
IP 头部的“接收方 IP 地址”填写通信对象的 IP 地址。
发送方 IP 地址需要判断发送所使用的网卡,并填写该网卡的 IP 地址。
IP 模块根据路由表 Gateway 栏的内容判断应该把包发送给谁。
如果路由表的设置正确,那么对方应该在同一子网,否则对方无法作出 ARP 响应,这时只能认为对方不存在,包的发送操作就会失败。

以太网经历了数次变迁,但其基本的 3 个性质至今仍未改变,即
(1)将包发送到 MAC 头部的接收方 MAC 地址代表的目的地,
(2)用发送方 MAC 地址识别发送方
(3)用以太类型识别包的内容

网卡的 ROM 中保存着全世界唯一的 MAC 地址,这是在生产网卡时写入的。
网卡中保存的 MAC 地址会由网卡驱动程序读取并分配给 MAC 模块。

使用集线器的半双工模式以太网中,一台设备发送的信号会到达连接在集线器上的所有设备.遇到错误或者丢包也一概不管。因为 UDP 只负责单纯地发送包

第三章 从网线到网络设备————探索集线器、交换机和路由器

集线器将信号发送给所有连接在它上面的线路。

交换机端口的 MAC 模块不具有 MAC 地址。
MAC 地址表主要包含两个信息,一 个是设备的 MAC 地址,另一个是该设备连接在交换机的哪个端口上。

使用双绞线时,发送和接收的信号线是各自独立的,因此在双绞线中信号不会发生碰撞。只要不用集线器,就可以避免信号碰撞了。

交换机的全双工模式可以同时发送和接收信号

路由器的各个端口都具有 MAC 地址和 IP 地址。

交换机是通过 MAC 头部中的接收 方 MAC 地址来判断转发目标的,而路由器则是根据 IP 头部中的 IP 地址 来判断的。

路由器会将接收到的网络包的接收方 IP 地址与路由表中的目标地址进行比较,并找到相应的记录。交换机在地址表中只匹配完全一致的记录,而路由器则会忽略主机号部分,只匹配网络号部分。
打个比方,路由器在转发包的时候只看接收方地址属于哪个区, ×× 区发往这一边,×× 区发往那一边。
路由器的端口都具有 MAC 地址,只接收与自身地址匹配的包,遇到不匹配的包则直接丢弃
通过路由器转发的网络包,其接收方 MAC 地址为路由器端口的 MAC 地址

路由器首先寻找网络号比特数最长的一条记录。网络号比特数越长,说明主机号比特数越短,也就意味着该子网内可分配的主机数量越少,即子网中可能存在的主机数量越少,这一规则的目的是尽量缩小范围。
如果在路由表中无法找到匹配的记录,路由器会丢弃这个包,并通过 ICMPA 消息告知发送方。

路由表中子网掩码为 0.0.0.0 的记录表示“默认路由”

TCP 拆分数据的操作是在将数据装到包里之前进行的,换句话说,拆分好的一个数据块正好装进一个包里。

路由器判断下一个转发目标的方法
(1)如果路由表的网关列内容为 IP 地址,则该地址就是下一个转 发目标
(2)如果路由表的网关列内容为空,则 IP 头部中的接收方 IP 地址就是下一个转发目标

路由器也会使用 ARP 来查询下一个转发目标的 MAC 地址
路由器将包的传输工作委托给交换机来进行
IP(路由器)负责将包送达通信对象这一整体过程,而其中将包传输到下一个路由器的过程则是由以太网(交换机)来负责的。

第四章 通过接入网进入互联网内部————探索接入网和网络运营商

PPPoE 是将 PPP 消息装入以太网包进行传输的方式
ISP: Internet Service Provider 互联网服务提供商
IXP: Internet eXchange Point 互联网交换点
RFC: Request For Comment 请求评论
P2P:peer to peer 对等连接方式
IX: Internet eXchange 互联网交换中心
BAS: 宽带接入服务器(具有身份认证、向客户端下发 IP 地址等配置信息的功能)
PPP: point-to-point Protocol
BGP: Border Gateway Proctol 边界网关协议
PPPoE: point-to-point Proctol over Ethernet
RADIUS: Remote Authentication Dial-in User Service 远程认证拨号用户服务
RAS: Remote Access Server 远程访问服务器

第五章 服务器端的局域网中有什么玄机

包过滤方式的防火墙可根据接收方 IP 地址、发送方 IP 地址、接收方端口号、发送方端口号、控制位等信息来判断是否允许某个包通过。

当操作跨多个页面时,则不考虑 Web 服务器的负载,而是必须将请求发送到同一台 Web 服务器上。

一些专门从事相关服务的厂商,他们来部署缓存服务器,并租借给 Web 服务器运营者。这种服务称为内容分发服务(DNS)

动态页面是不能保存在缓存服务器上,只将静态部分保存在缓存中。

第六章 请求到达 Web 服务器,响应返回浏览器

可以通过端口号来区分服务器上的应用程序,所以一台服务器上可以同时运行多个服务器程序,不仅限于 Web 和 邮件。

客户端与服务器的区别

一般来说服务器端都是处于等待包到达的状态,这时应用程序会暂停运行。在这个状态下,一旦客户端的包到达,就会返回响应包并开始接受连接操作。接下来,协议栈会给等待连接的套接字复制一个副本,然后将连接对象等控制信息写入新的套接字中。

使用描述符来指代套接字的原因如下。
(1)等待连接的套接字中没有客户端 IP 地址和端口号 (2)使用描述符这一种信息比较简单

网卡的 MAC 模块将网络包从信号还原为数字信息,校验 FCS 并存入缓冲区
网卡驱动会根据 MAC 头部判断协议类型,并将包交给相应的协议栈。

协议栈的 IP 模块会检查 IP 头部
(1) 判断是不是发给自己的;
(2) 判断网络包是否经过分片;
(3) 将包转交给 TCP 模块或 UDP模块。

如果收到的是发起连接的包,则 TCP 模块会
(1) 确认TCP 头 部的控制位 SYN;
(2) 检查接收方端口号;
(3) 为相应的等待连接套接字复制一个新的副本;
(4) 记录发送方 IP 地址和端口号等信息。

TCP 模块会对比该套接字中保存的数据收发状态和收到的包的 TCP 头部中的信息是否匹配,以确定数据收发操作是否正常。具体来说,就是根据套接字中保存的上一个序号和数据长度计算下一个序号,并检查与收到的包的 TCP 头部中的序号是否一致。如果两者一致,就说明包正常到达了服务器,没有丢失。这时,TCP 模块会从包中提出数据,并存放到接收缓冲区中,与上次收到的数据块连接起来。这样一来,数据就被还原成分包之前的状态。
拼合数据块的操作在每次收到数据包时都会进行,而不是等所有数据全部接受完毕之后再统一拼合的。

收到数据包时,TCP 模块会
(1) 根据收到的包的发送方 IP 地址、发送方端口号、接收方 IP 地址、接收方端口号找到相对应的套接字;
(2) 将数据块拼合起来并保存在接收缓冲区中;
(3) 向客户端返回 ACK。

Web 服务器的访问控制规则主要有以下 3 种
(1)客户端 IP 地址
(2)客户端域名
(3)用户名和密码

来源:PeashooterW

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2018年5月10日
下一篇 2018年5月11日

相关推荐