这本书在豆瓣评分高达9.3,属于非常好的书一类。通过它,可以了解网络的全貌。
0
GET和POST
- 端口号:web 80,邮件 25。
- URI的内容是网页的文件名或者CGI程序。
- HTTP常用的方法是GET,POST,POST的URI通常指向服务器的一个程序。GET能发送的数据只有几百字节,超过这个就要使用POST。GET的消息体中不包含数据。
- HTTP头部字段中Host表示请求的服务器IP地址和端口号。
- 响应消息中的状态吗2开头表示成功,4开头表示客户端错误,如404错误。
DNS
- DNS作用是根据域名查询IP地址。
- TCP/IP结构是由子网通过路由器连接起来的大网络。几台计算机由集线器连接起来构成子网。家用路由器内置了集线器功能。消息经由集线器发送到最近的路由器,再发往下一个路由器。
- IP地址是一串32比特的数字,8比特一组分为4组。
- 子网掩码为1的部分表示网络号,为0的部分表示主机号。主机号全部为0代表整个子网,主机号全部为1代表向子网所有设备发包,即广播。
- 不使用域名,只用IP地址,数字太难记。只用域名,字节数太长不固定降低效率。2者并用效率高,需要桥梁,就是DNS出现的原因。
- Socket库是提供网络功能的组件集合。
- 还可以根据IP地址反查域名。
- 域名还可分上下级。可以通过上级DNS服务器查询下级DNS服务器的IP地址。根域保存在所有DNS服务器里面。根域的IP地址全世界只有13个。
- DNS服务器还有缓存功能。
套接字、端口号
- 数据收发分为4个阶段,创建套接字,连接,通信,断开。服务器启动后就会创建好套接字,断开是客户端发起。通过描述符识别不同的套接字。
- 套接字加上IP地址和端口号就可以识别具体那台计算机了。端口号是让对方能够识别出套接字的机制。连接开始时,客户端会将这个随便分配的端口号告诉服务器。
1
协议栈
- 浏览器、邮件一般使用TCP,DNS查询收发较短数据采用UDP.
- IP模块负责收发网络包,IP中还包含ICMP和ARP,ICMP用于告知网络包传送过程中产生的错误。ARP根据IP地址查询以太网MAC地址。
- 套接字的实体是存放控制信息的内存空间。
- TCP头部,MAC头部,IP头部。头部用来记录和交换控制信息。
连接、SYN、ACK
- 协议栈将服务器IP地址,端口号传递给TCP模块,客户端先创建一个包含控制信息的头部。接下来将头部中的SYN比特置为1,表示连接,交给IP模块发送。服务器收到后返回响应,头部设置跟客户端发来的一样,除此还要将ACK位置为1,表示收到客户端发来的网络包。客户端收到后,如果SYN为1表示连接成功,还要将ACK位置为1发回服务器,告诉服务器刚才的网络包已收到,服务器收到之后,连接完成。
发送、MTU、序号、窗口
发送时机有两个因素决定。1个是网络包的最大长度,MTU,在以太网中一般是1500字节,MTU是包含头部的总长度,减去头部的长度叫做MSS。第2个要素是时间,协议栈内部有个计时器,一定时间之后就发送包,即时数据没积累到MSS。浏览器一般是直接发送,不等到填满缓冲区。
TCP可以确认对方是否收到包,没收到需要重发。序号用来告知接收方网络包在全部数据中的起始位置,连接操作中,将SYN置1时,将随机的起始序号告诉对方。除了序号还要告知对方包的长度。接收方根据序号和长度算出一共收到多少字节,将这个数值写入ACK号中,发到发送方。
重传几次无效之后,TCP会强制结束通信,向应用程序报错。关于重传之前的等待时间,TCP会动态调整,根据发送数据时测量ACK的返回时间,动态调整。
滑动窗口。发送包等待送达确认,如果第二个包等待第一个包的送达确认,效率会很低,所以发送包是按频率发送的,并不等待送达确认。如果频率太块,会导致接收方处理数据的能力,造成接收方缓冲区溢出。所以接收方应该告诉发送方自己缓冲区还有多少空间,这个数据在TCP的窗口字段中,表示接收方还能接受的最大数据长度。ACK号和窗口更新返回可以合并,提高效率。
断开、删除
- 无论哪一方先发起断开,需要将TCP头部中的FIN比特设为1发送,接收方表示收到需要返回ACK号,这个过程双方都要做。删除一般需要等待几分钟,防止断开发送失败,重传后来到达,等待就是等待重传失败。
IP模块、ARP、网卡、集线器、UDP
集线器按照以太网规则传输,路由器根据IP规则传输。MAC头部用于以太网头部,IP头部用于IP协议。IP协议根据IP地址找出传输方向,委托以太网协议传输,根据MAC地址找出下一个传输设备。以太网的部分可以被替换成无线局域网、ADSL、FTTH.
IP模块添加MAC头部、IP头部。之后交给网卡,网卡将数字信息转换成电信号或者光信号传输出去。
IP头部中最重要的就是IP地址,接收方IP地址来源于应用程序。发送方IP地址根据计算机配备的网卡决定,计算机启动时会自动分配。路由表中有网关,代表下一个路由器的IP地址,默认网关是0.0.0.0。协议号06代表TCP,17代表UDP。
MAC头部中包含接收方发送方MAC地址,IP地址长度32比特,MAC头部48比特。MAC地址是网卡生产时写入ROM里的。
ARP根据IP地址查询MAC地址。使用广播的技术,将包发送给子网中所有设备来查询,查询时候放入ARP缓存中。ARP中缓存在几分钟之后会删除。
以太网中发送的包,所有设备都能收到。一开始是中继式集线器后来发展为交换式集线器,后者也叫交换机。交换式中信号只会流到指定的MAC地址的设备上,而不是所有设备。
网卡负责将数字信号转换为电信号或者光信号。网卡中保存着全世界唯一的MAC地址。网卡中的MAC模块会为数据包加上报头、起始帧分界符SFD,和FSC。MAC头部是由IP模块负责的,并不是网卡。报头用来测定读取时机,SFD用来确定帧的起始位置。
根据电流电压变化能还原出数据信号,但是如果数据是连续的0或1,就无法分辨信号的分界点了,所以使用时钟信号和数字信号叠加的方式。时钟信号是0和1交替的信号。找出时钟信号的周期就能分离数字和时钟信号的叠加信号,报头的作用就在这里。起始帧分界符是表示包起始位置的标记。FCS用来检测包传输中因为噪声导致的数据错误,是根据前面的数据来计算出来的,如果数据发生了变化,接收方算出来的FSC就会和数据中保存的不一致。
MAC模块转换之后,从PHY/MAU模块发送出去,其功能就是将信号进行格式转换。双绞线的情况两台设备之间的距离不能超过100米。半双工模式下会发生信号碰撞,一旦碰撞还需要发送阻塞信号,所有发送操作会终止。等待一段时间后,再重新发送。
包接收时,如果IP模块检测到错误会发送ICMP消息告知发送方。IP还需要将分片的数据重组。
UDP用于数据很短,只有一个包,不需要重发的情况,例如DNS。UDP没有TCP中的确认、窗口机制,也不需要建立和断开连接,只要加上UDP头部交给IP模块就好了,错误时就重发一遍,最大能传输的数据大概是6M多。另外一种使用UDP的情况就是音频视频,在音频视频上,就算错误重发了也无法补救,重发也没意义,这时使用UDP效率更高。
2
双绞线、集线器、交换机、路由器
信号在网线中传输会衰减,线路越长,衰减越严重。因为噪声而失真。双绞线就是为了抑制噪声。环境中的电磁波产生噪声。双绞使得线路电流相互抵消,从而抑制噪声。内部相邻的信号线会产生内部噪声,也就是串绕,串绕可以通过控制节距来抑制。
集线器把信号发送给所有连接的线路。交换机根据地址表进行转发,交换机端口的MAC模块不具有MAC地址。查找到MAC地址后,将信号发送到相应的端口。MAC地址表的维护是交换机自发维护。如果找不到,会转发到除了源端口之外的所有端口。
交换机的全双工模式同时进行发送和接受,不会发生碰撞。比半双工效率高。根据脉冲信号,将自己支持的模式和速率告知对方,这就是自动协商。
路由器的端口具有MAC地址和IP地址,根据IP地址判断转发目标。会忽略主机号,只匹配网络号。路由器只接收与自身MAC地址匹配的包,不匹配的直接丢弃。判断转发目标时,采用最长匹配,即从网络号比特数最长的开始。无法匹配,丢弃后通过ICMP通知发送方。子网掩码为0.0.0.0的记录表示默认路由,找不到匹配时选择默认路由。包有生存时间TTL,每经过一次路由这个值减一,减到0就丢弃。
IP中的分片是指对于网络包再拆分,如果包的长度大于端口MTU就需要分片,首先查看IP头部的字段看看是否可以分片,不能分片丢弃发ICMP消息,分片的话,每个分片数据前加上IP头部。
路由器发送时查看路由表的网关列,如果网关列内容是IP地址,此IP地址就是下一个转发目标,如果网关列为空,则IP头部中的接收方IP地址就是下一个转发目标。也是用ARP查询下一个目标的MAC地址。
路由器负责将包送达通信对象这一过程,其中交换器负责将包传输到下一个路由器这个传输过程。
路由器还有地址转换和包过滤的功能。内网使用私有地址,与互联网通信需要把私有地址改写为公有地址,根据端口号来区别私有地址中的设备。一个公有地址可以对应几万个私有地址。包过滤应用于防火墙等设备。
3
ADSL、光纤
接入网方式包括,ADSL、FTTH、电话线等。互联网接入路由器在网络包前面加上MAC头部、PPPoE头部、PPP头部,然后发送给ADSL调制解调器。调制解调器将包拆分成信元,转换成电信号发送给分离器。调制采用振幅调制加相位调制结合的方式,并且使用多个波来提高速率。
分离器的作用是将电话信号和调制信号分离。DSLAM具有ATM接口,与路由器收发数据使用的是ATM信元格式。BAS负责将信元还原成网络包,并转发到会联网内部。
光纤的原理是将数字信号转换成电信号,再转换成光信号。根据纤芯直径不同,分为较细的单模光纤和粗的多模光纤。多模光纤传导多条光,单模光纤传导一条光。光纤越长越容易失真,单模光纤失真较小。多模光纤用于建筑物里面,单模光纤连接建筑物。
FTTH分为直连和分路2种方式。PPPoE是将PPP消息装入以太网包进行传输的方式。
互联网接入路由器通过PPPoE的发现机制查询BAS的MAC地址。BAS下发的TCP/IP参数被配置到互联网接入路由器的BAS端的端口上。BAS收到用户路由器发送的网络包之后会去掉MAC头部和PPPoE头部,用隧道机制发送给运营商的路由器。互联网接入路由器将私有地址转换为公有地址。
PPPoA不添加MAC头部和PPPoE头部,直接将包装入信元中。DHCP不使用PPP,而是将以太网包直接转换成ADSL信号发送给DSLAM。
网络包接入网之后到达运营商POP的路由器。POP扩大规模之后就是NOC,NOC是运营商的核心设备。互联网内部使用BGP机制在运营商之间交换路由信息。IX将多个运营商汇聚在一起,
4
缓存服务器、负载均衡器、防火墙、代理、分发
防火墙最普及的是包过滤方式的。通过接收方IP地址,发送方IP地址、接收方端口号、发送方端口号、控制位信息来判断是否允许某个包通过。
服务器性能不足时,需要使用负载均衡器。用缓存服务器分担负载。缓存服务器通过更新时间管理内容。缓存服务器收到请求之后会给服务器发送一个查询响应是否改变的消息,没有改变则从缓存中取数据。
正向代理,接收客户端的请求消息,再转发到互联网。可以查看消息内容,实现防火墙的功能。反向代理,能转发一段不包含完整网址的请求。透明代理是缓存。
内容分发服务,缓存服务器交给服务器运营者管理。找到最近的缓存服务器,然后重定向。服务器内容变化时,通知缓存服务器更新。
5
服务器
服务器系统有多任务、多线程的功能。描述符的作用,等待连接的套接字中没有客户端IP地址和端口号。网卡的MAC模块将网络包从信号还原为数字信息,检验FCS并存入缓冲区。
IP模块的接收,判断是不是发给自己的,判断是否分片,将包交给TCP模块或者UDP模块。
TCP处理连接包,确认TCP头部的控制位SYN,检查接收方端口号,为等待连接套接字复制一个副本,记录发送方IP地址和端口号。
TCP处理数据包,根据发送方IP地址,发送方端口号,接收方IP地址,接收方端口号,找到对应的套接字。将数据拼合起来保存在接收缓冲区中,向客户端返回ACK。
响应,将请求的URI转换成实际的文件名。web服务器还有访问控制,限制特定用户才能访问,如会员制。
响应的数据类型,Content-Type字段。text/html是html文档,image/jpeg JPEG格式的图片等。
6
术语解释
简称 | 释义 |
---|---|
URL | 统一资源定位符 |
FTP | 文件传送协议 |
HTTP | 超文本传输协议 |
URI | 统一资源标识符 |
DNS | 域名服务系统 |
SFD | 起始帧分界符 |
FCS | 帧校验序列 |
ARP | 地址解析协议 |
ICMP | 控制报文协议 |
ADSL | 不对称数字用户线 |
FTTH | 光纤到户 |
DHCP | 动态主机配置协议 |