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

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

计算机基础理论

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

网络控制软件叫作**协议栈**。这个软件会将从浏览器接收到的消息打包,然后加 上目的地址等控制信息。协议栈会将包交给网卡(负责以太网或无线网络通信的硬件)。然后,网卡会将包转换为电信号并通过网线发送出去。

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

*浏览器的第一步工作就是对 URL 进行解析。*
http://www.lab.glasscom.com/dir/
我们可以这样理解,以“/”结尾代表 /dir/ 后面本来应该有的文件名被 省略了

http://www.lab.glasscom.com/
这个 URL 也是以“/”结尾的,也就是说它表示访问一个名叫“/”的目录。而且,由于省略了文件名,所以结果就是访问 /index.html 或者 /default.htm 这样的默认文件了

http://www.lab.glasscom.com/whatisthis 
如果 Web 服务器上存在名为 whatisthis 的文件,则将 whatisthis 作为文件名来处 理;如果存在名为 whatisthis 的目录,则将 whatisthis 作为目录名来处理

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

发送者发出的消息首先经过子网中的集线器,转发到距离发送者最近的路由器上。接下来路由器会根据消息的目的地判断下一个路由器的位置,然后将消息发送到下一个路由器。即消息再次经过子网内的集线器被转发到下一个路由器。

IP 地址的主机号
全 0:表示整个子网
全 1:表示向子网上所有设备发送包,即“广播”

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

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

收发数据的操作分为若干个阶段,可以大致总结为以下 4 个。
(1)创建套接字(创建套接字阶段) 
(2)将管道连接到服务器端的套接字上(连接阶段) 
(3)收发数据(通信阶段) 
(4)断开管道并删除套接字(断开阶段)

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

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

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

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

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

1. http://www.nikkeibp.co.jp/ 中的 http 代表什么意思?
答:http 协议

2. 下面两个网址有什么不同?
a. http://www.nikkeibp.co.jp/sample
b. http://www.nikkeibp.co.jp/sample/
答:a 中的 sample 代表文件名,b 中的 sample 代表目录名

3. 用来识别连接在互联网上的计算机和服务器的地址叫什么?
答:IP 地址

4. 根据 Web 服务器的域名来查询 IP 地址时所使用的服务器叫什么?
答: DNS 服务器

5. 向 DNS 服务器发送请求消息的程序叫什么?
答:解析器

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

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

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

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

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

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

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

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

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

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

在等待发送 ACK 号的时候正好需要更新窗口,这时就可以把 ACK 号和窗口更新放在 一个包里发送,从而减少包的数量。当需要连续发送多个 ACK 号时,也 可以减少包的数量,这是因为 ACK 号表示的是已收到的数据量,也就是 说,它是告诉发送方目前已接收的数据的最后位置在哪里,因此当需要连续发送 ACK 号时,只要发送最后一个 ACK 号就可以了,中间的可以全部省略。

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

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

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

网络中有路由器和集线器两种不同的转发设备,它们在传输网络包时有着各自的分工
(1)路由器根据目标地址判断下一个路由器的位置 (2)集线器在子网中将网络包传输到下一个路由

实际上,集线器是按照以太网规则传输包的设备,而路由器是按照 IP 规则传输包的设备,因此我们也可以作如下理解:
(1)IP 协议根据目标地址判断下一个 IP 转发设备的位置 (2)子网中的以太网协议将包传输到下一个转发设备

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

集线器里有一张表(用于以太网协议的表),可根据以太网头部中记录的目的地信息查 出相应的传输方向

路由器中有一张 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 只负责单纯地发送包

1.表示网络包收件人的接收方 IP 地址是位于 IP 头部还是 TCP 头部 中呢?
答:IP 头部

2. 端口号用来指定服务器程序的种类,那么它位于 TCP 头部还是 IP 头部中呢?
答:TCP 头部

3. 会对包是否正确送达进行确认的是 TCP 还是 IP 呢?
答:TCP

4. 根据 IP 地址查询 MAC 地址的机制叫什么?
答:ARP

5. 在收到 ACK 号之前继续发送下一个包的方式叫什么?
答:滑动窗口方式

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

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

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

交换机根据 MAC 地址表查找 MAC 地址,然后将信号发送到相应的端口。
收到包时,将发送方 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(路由器)负责将包送达通信对象这一整体过程,而其中将包传输到下一个路由器的过程则是由以太网(交换机)来负责的。

地址转换设备会随机选择一个空闲的端口。然后,改写前的私有地址和端口号,以及改写后的公有地址和端口号,会作为一组相对应的记录保存在地址转换设备内部的一张表中。

对外只能使用一个公有地址的情况下,可以用不同的端口号来区别内网中的不同终端。
对于从公司内网访问互联网的包,即便其发送方私有地址和端口号没有保存在对应表中也是可以正常转发的,因为用来改写的公有地址就是地址转换设备自身的地址,而端口号只要随便选一个空闲的端口就可以了,这些都可以由地址转换设备自行判断。
然而,对于从互联网访问公司内网的包,如果在对应表中没有记录就无法正常转发。因为如果对应表中没有记录,就意味着地址转换设备无法判断公有地址与私有地址之间的对应关系

1.局域网中使用的双绞线中为什么要将信号线缠绕在一起?
答:为了抑制噪声的影响
2. 将输入的信号广播到所有端口上的设备是交换机还是集线器?
答:集线器

3. 用来指定网络号和主机号比特数的值叫什么?
答:子网掩码

4. 将大网络包进行拆分的功能叫什么?
答:分片

5. 路由器的路由表中有时可以看到子网掩码为 0.0.0.0 的记录,这代
表什么意思?
答:默认路由

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

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 远程访问服务器

1.什么是接入网?
答:用于连接网络运营商的线路

2. 要使用 ADSL 服务,需要安装一个将电话信号和 ADSL 信号分开的设备,这个设备叫什么名字?
答:分离器

3. 和电话局距离越远,ADSL 的通信速率越低,为什么?
答: 因为离电话局越远,信号越弱

4. BAS(宽带接入服务器)与一般的路由器有什么不同?
答:BAS 具有身份认证、向客户端下发 IP 地址等配置信息的功能

5. 将多个运营商汇聚在一起相互连接的设备叫什么?
答:IX

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

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

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

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

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

1.现在主流的防火墙方式叫什么?
答:包过滤方式

2. 当防火墙需要确定应用程序种类时要检查什么信息?
答:端口号

3. 用于分担 Web 服务器负载,将访问分配到多台服务器上的设
备叫什么?
答:负载均衡器

4. 部署在服务器端的代理是正向代理还是反向代理?
答:反向代理

5. 在互联网中部署多台缓存服务器,并将其租借给 Web 服务器
运营者的服务叫什么?
答:内容分发服务(CDS 或 CDN)

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

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

客户端与服务器的区别

区别体现在如何调用 Socket 库上。
首先,客户端的数据收发需要经过下面 4 个阶段。
(1)创建套接字(创建套接字阶段) 
(2)用管道连接服务器端的套接字(连接阶段) 
(3)收发数据(收发阶段) 
(4)断开管道并删除套接字(断开阶段)

相对地,服务器是将阶段(2)改成了等待连接,具体如下。
(1)创建套接字(创建套接字阶段) 
(2-1)将套接字设置为等待连接状态(等待连接阶段) 
(2-2)接受连接(接受连接阶段) 
(3)收发数据(收发阶段) 
(4)断开管道并删除套接字(断开阶段)

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

使用描述符来指代套接字的原因如下。
(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)用户名和密码

1.在包收发操作中,服务器和客户端的区别是什么?
答:没有区别

2. 当包到达服务器时,网卡会接收信号并通知 CPU,此时使用的机制叫什么?
答:中断

3. Web 服务器可以同时处理多个客户端的访问,这里利用了操作系统的什么功能?
答:多任务和多线程

4. 当需要对 Web 服务器的访问进行限制的时候,可以根据哪些条件来判断是否允许访问?
答:(a)客户端 IP 地址;(b)客户端域名;(c)用户名和密码

5. Web 服务器返回的数据包括文档、图片等多种类型,客户端如何判断返回数据的不同类型?
答:原则上根据响应消息的 Content-Type 头部字段的值来判断
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值