《How Networks work》 #
第一章 浏览器生成消息 #
-
浏览器的第一步工作就是对URL进行解析
-
1条请求消息中只能写一个人URL。如果需要获取多个文件,必须对每个文件单独发送1条请求。
-
IP地址的主机号
- 全0: 表示整个子网
- 全1: 表示向子网所有设备发送包,即“广播”
-
Socket 库是用于调用网络功能的程序组件集合
-
根据域名查询IP地址时,浏览器会使用Sockt库中的解析器
-
DNS服务器会从域名与IP地址的对照表中查找相应的记录,并返回IP地址
-
向操作系统内部的协议栈发出委托时,需要按照指定的顺序来调用Socket库中的程序组件
-
应用程序时通过“描述符”这一类号码牌的东西来识别套接字的
-
描述符:应用程序用来识别套接字的机制
-
IP地址和端口号:客户端和服务端之间用来识别对方套接字的机制
第二章 用电信号传输TCP/IP数据 #
-
浏览器、邮件等一般应用程序收发数据时用TCP
-
DNS查询等收发较短的控制数据时用UDP
-
协议栈时根据套接字中记录的控制信息来工作的
-
创建套接字时,首先分配一个套接字所需的内存空间,然后向其中写入初始状态
-
通信操作中使用的控制信息分为两类
- 头部中记录的信息
- 套接字:(协议栈中的内存空间) 中记录的信息
-
连接操作的第一步是在TCP模块处创建表示连接控制信息的头部
-
通过TCP头部中的发送方和接收方端口号可以找到要连接的套接字
-
MTU: 一个网络爆的最大长度,以太网中一般为1500字节
-
MSS:出去头部之后,一个网络包所能容纳的TCP数据的最大长度
-
通过序号的ACK号,可以确认接收方是否收到了网络包
-
IP模块负责添加如下两个头部
- MAC头部:以太网用的头部,包含MAC地址
- IP头部:IP用的头部,包含IP地址
-
无论要收发的包时控制包还是数据包,IP对各种类型的包收发操作时一样的
-
IP头部的“接收方IP地址”填写通信对象的IP地址
-
发送方IP地址需要判断发送所使用的网卡,并填写该网卡IP地址
-
IP模块根据路由表Gateway栏的内容判断应该把包发送给谁
-
查询MAC地址需要使用ARP(地址解析协议 Address Resolution Protocol)
-
网卡中的ROM中保存着全世界唯一的MAC地址,这是在生产网卡时写入的
-
网卡中保存的MAC地址会由网卡驱动程序读取并分配给MAC模块中
-
网卡的MAC模块生成通用信号,然后由PHY(MAU)模块进行转换成可在网线中传输的格式,并通过网线发送出去
第三章 从网线到网络涉别 #
-
集线器将信号发送给所有连接在它上面的线路
-
交换机端口的MAC模块不具有MAC地址
-
交换机根据MAC地址表查找MAC地址,然后将信号发送到相应的端口
-
交换机的全双工模式可以同时发送和接收信号
-
路由器的各个端口都具有MAC地址和 IP地址
-
路由器根据“IP地址”判断转发目标
-
路由器会忽略主机号,只匹配网络号
-
路由表的子网掩码只表示在匹配网络包目标地址时需要对比的比特数量
-
路由器的端口都具有MAC地址,只接收与自身地址匹配的包,遇到不匹配的包则直接丢弃
-
通过路由器转发的网络包,其接收方MAC地址为路由器端口的MAC地址
-
路由表中的子网掩码为0.0.0.0的记录表示默认路由
-
路由器判断下一个转发目标的方法如下:
- 如果路由表的网关列表内容为IP地址,则该地址就是下一个转发目标
- 如果路由表的网关列表内容为空,则IP头部的接收方IP地址就是下一个转发目标
-
路由器也会使用ARP来查询下一个转发目标的MAC地址
-
IP(路由器)负责将包送达通信对象这一整体过程,而其中将包传输到下一个路由器的过程则是由以太网(交换机)来负责的
第四章 通过接入网进入互联网内部 #
- 互联网接入路由器会在网络包前面加上MAC头部、PPPoE头部PPP(点对点协议)头部总共3中头部,然后发送给ADSL Modem
- ADSL Modem将包拆分成信元,并转换成电信号发送给分离器
- PPPoE是将PPP信息转入以太网包进行传输的方式
- 互联网接入路由器通过PPPoE的发现机制查询BAS的MAC地址
- 一对一联机的端口可以不分配IP地址,这种方式成为无编号
- DHCP (Dynamic host configuration protocol)不使用PPP,而是将以太网包直接转换成ADSL信号发送给DSLAM
- 网络包通过接入网之后,到达运营商POP的路由器
- 互联网内部使用BGP机制在运营商之间交换路由信息(border gatewat protocol 边界网关协议)
第五章 服务器端的局域网中有什么玄机 #
- 包过滤方式的防火墙可根据接收方IP地址,发送方IP地址,接收方端口号,发送方端口号,控制位等信息来判断是否允许某个包通过
第六章 请求到达WEB服务器,相应返回浏览器 #
-
使用描述符来指代套接字的原因
- 等待连接的套接字中没有客户端IP地址和端口号
- 使用描述符着一种信息比较简单
-
网卡的MAC模块将网络包从信号还原为数字信息,校验FCS并存入缓冲区
-
网卡驱动会根据MAC头部判断协议类型,并将包交给相应的协议栈
-
协议栈的IP模块会检查IP头部
- 判断是不是发给自己的
- 判断网络包是否经过分片
- 将包转交给TCP模块或UDP模块
-
如果接收到的是发起连接的包则TCP模块会
- 确认头部的控制位SYN
- 检查接收方端口号
- 为相应的等待连接套接字复制一个新的副本
- 记录发送 IP地址和端口号等信息
-
收到数据包时TCP会
- 根据收到的包的发送方IP地址、发送方端口号、接收方IP地址、接收方端口号发找到相应的套接字
- 将数据块拼合起来并保存在接收缓冲区中
- 向客户端返回ACK