学习笔记 --《计算机网络-自顶向下方法》
计算机网络
1.计算机网络和因特网
- 因特网的主要协议统称发布为TCP/IP。IP协议定义了在路由器和端系统之间发送和接受的分组协议。
- 套接字接口(socket interace),规定了运行在一个端系统上的程序请求因特网基础设施向正在运行在另一个端系统上的特定目的地程序交付数据的方式。因特网套接字接口是一套发送程序必须遵守的规则集合。
- 协议定义了在两个或多个通信实体之间的报文的格式和顺序,以及报文发送和/或接受一条保文或其他事件所采取的动作。
- 接入网,是将端系统物理连接到其边缘路由器的网络。
- 数字用户线(DSL),用电话线的高频音来承载数据传输,低频用作电话信号。是通过DSL调制解调器得到数字数据后将其转换成高频音,通过电话线传输给本地中心局,模拟信号在DSLDM处被转换回数字形式。
- 电缆因特网接入,利用有限电视公司的同轴电缆。和采用电话线一样,需要增加电缆调制解调器,电缆调制解调器端接系统(CMTS)与DSLAM类似,用于将电缆调制解调器发送的模拟信号转换回数字信号。分为上行信道和下行信道。
- 光纤,在被动交换网络(PON)中,同样是用户通过光纤网络端接收器,光纤连接到临近的分配器,分配器把一些家庭集结到一根共享的光纤,该光纤再连接到服务商的光纤线路接收器(OLT)上。OLT提供了光与电信号的转换。
- 以太网接入(局域网LAN),用双绞线与以太网交换机连接,再接入到更大的因特网。
- Wifi(基于IEEE 802.11d的无线LAN接入)
- 广域无线接入,与Wifi不同,可以在很远处接入。
- 报文(message),是端系统彼此交换的信息,能够包含协议设计者需要的任何东西。
- 分组交换,具有宽带共享、简单高效成本低的优点。
- 分组(packet),源系统发送的长报文会被其分成较小的数据快,成为分组。每个分组都通过通信链路和分组交换机传送。(交换机包含路由器和链路层交换机)。
- 一般交换机在转发输入分组的第一个比特之前,必须接受到整个分组。称为存储转发机制。
- 转发表,路由器根据转发表将目的地址IP(或目的地址的一部分)映射成输出链路,这样才能确定该分组输出在哪一条链路。
- 电路交换网络,会在端系统通信会话期间预留系统沿线路径通信所需要的资源,分组交换交换中不预留。
- 使用频分复用(FDM)或者时分复用(TDM)。
- 各层的所有协议称为协议栈。
- 五层因特网协议栈
- 应用层(Application layer),HTTP、DNS、SMTP、FTP。将位于应用层的信息分组称为报文(message)。
- 运输层(Transport Layer),UDP、TCP,传送应用层报文。运输层的分组称为报文段。
- 网络层(Network Layer),IP协议。负责将称为数据报的网络层分组从一台主机移动到另一台主机。
- 链路层(Datalink Layer),以太网、Wifi、电缆接入网协议DOCSIS。链路层的分组称为帧。
- 物理层(Physical Layer),将帧中的一个个比特从一个节点移动到下一个节点。
2.应用层
- 程序的通信,其实是进程间的通信。对于端系统来说,一个进程就是一个程序。进程通过交换报文从而实现通信。
- 在一对进程之间的通信会话场景中,发起通信的进程标识为客户,会话开始时等待联系的进程是服务器。
- 进程通过套接字接口,向网络发送和接收报文。套接字是应用层和运输层之间的接口,也被称为应用程序与网络之间的应用程序编程接口。
- 应用程序开发者可以控制套接字在应用层端的一切,但是在运输层端几乎没有。
- 应用程序对于运输层的控制仅限于:选择运输协议;也许能设定几个运输层参数(如最大缓存和最大报文长度)。
- 接收进程地址包括主机地址(IP)和端口(PORT)号。
- 应用层需要选择自己的运输层协议,运输层一般包括以下服务:可靠传输、吞吐量、定时、安全性。
- TCP/IP网络的运输层提供两个运输服务TCP(面向连接、可靠数据传输、拥塞控制)、UDP(无连接、不可靠传输)。
- TCP的加强版安全套接字SSL,不仅能做到传统TCP的一切,还能提供安全服务,包括加密、数据完整性、端口鉴别。SSL不是在运输层,而是在应用层实现的。
- 应用层协议包含以下内容:
- 交换的报文的类型
- 各种报文类型的语法
- 字段的语义
- 确定一个进程何时以及如何发送报文,对报文进行相应的规划
- Web的应用层协议是超文本传输协议HTTP,HTTP定义了Web客户向Web服务器请求Web页面的方式,以及服务器向客户传送Web页面的方式。
- HTTP选择TCP作为运输层协议。服务器不存储任何关于该客户的状态信息,是无状态协议。
- HTTP默认是持续性连接,即所有请求经相同的TCP连接进行。也可以配置成非持续连接。
- 非持续连接缺点:必须为每一个请求对象建立和维护一个全新的连接。每一个对象经受两倍(RTT往返时间)的交付时延,一个用于创建TCP,另一个RTT用于请求和接受一个对象。
- 采用持续连接可以保持该TCP连接打开,后续的请求和相应报文能够按照相同的连接进行传送。
- HTTP响应格式
-
请求报文
copy- 1
- 2
- 3
- 4
- 5
GET /Default/go?sortID=52 HTTP/1.1 Host: lib.chd.edu.cn Connection: keep-alive User-Agent: Mozilla/5.0 Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,ja;q=0.7
第一行叫做请求行,包括方法字段(GET、POST、HEAD、PUT、DELETE)、URL字段、HTTP版本字段。
Connection:keep-alive为持续连接,User-Agent用户代理,Accept-Language返回语言。
HEAD方法类似于GET方法,使用该方法会返回一个HTTP报文,但并不返回请求对象。
PUT方法允许用户上传对象到指定Web服务器上的指定的路径。
DELETE方法允许用户或应用程序删除Web服务器上的对象。 -
响应报文
copy- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
HTTP/1.1 200 OK Cache-Control: private Content-Type: text/html; charset=utf-8 Content-Encoding: gzip Vary: Accept-Encoding Server: Server X-AspNet-Version: 4.0.30319 X-AspNetMvc-Version: 4.0 X-Powered-By: ASP.NET Date: Wed, 15 Sep 2021 07:30:56 GMT Content-Length: 6437 X-DNS-Prefetch-Control: off
第一行是状态行,包含协议版本字段、状态码、相应状态信息。
Server与User-Agent类似,指出服务器。
Content-Length指出被发送对象的字节数。
Content-Type发送对象的类型。
常见状态码与相关短语状态码 信息 200 OK 301 Moved Permanently 400 Bad Request 404 Not Found 505 HTTP Version Not Support
-
- 用户与浏览器的交互:cookie,它允许站点对用户进行追踪。
- Web缓存,也叫代理服务器,它能够代表初始服务器来满足HTTP请求的网络实体。内容分发器网络CDN,在因特网上安装了许多地理上分散的缓存器,从而使大量流量实现了本地化。
- 条件GET,允许缓存器证实它的内容是最新的。在请求报文中添加首部行"if-modified-since:"。原始服务器返回304表示没有被修改,可以继续使用缓存器中的内容。
- 简单邮件传输协议SMTP
- DNS因特网目录服务
- P2P文件分发
- 视频流于内容分发网CDN
- 套接字编程
3.运输层
-
运输层协议是在端系统中实现,而不是路由器中实现。
-
运输层会将应用发送的报文转换成运输层分组,也称为运输层报文段(segment)。
- 一般将报文分成更小的报文段,会添加上一个运输层首部。
-
网际协议IP,是不可靠服务。
-
多路分解:将运输层报文段中的数据交付到正确的套接字的工作。
-
多路复用:从不同套接字中收集数据块,并为每个数据块封装上首部信息(以便用于分解)从而生成报文段,然后将报文段传递到网络层的工作。
-
端口号是一个16位比特的数,在0~65535之间。0~1023是周知端口号,是受限制的,保留给HTTP之类的用。
-
无连接的多路复用与多路分解 UDP
- 当程序创建一个套接字时,运输层会自动给该套接字分配一个端口(未被使用),也可以自己指定
- 发送端创建运输层报文段,包含应用程序数据、原端口、目的端口和长度与检验和。
- 运输层将该报文段封装到一个IP数据报中,并尽力交付给目的主机。
-
面向连接的多路复用与多路分解
- 如客户通过欢迎套接字,与服务器建立连接,后续通过服务器新创建的连接套接字进行通信。
- 为什么叫面向连接:因为进程通信前,两个进程将首先“握手”(建立连接),初始化一些建立连接的TCP状态变量
-
UDP结构
- 长度: UDP用户数据报的长度,其最小值是8(仅有首部)。
- 校验和:检测UDP用户数据报在传输中是否有错。有错就丢弃。
-
可靠数据传输原理
- 自动重传请求协议ARQ,正确返回ACK,错误返回NAK。当发送方无法辨别反回的是ACK或为NAK时,自动重传(加入分组编号字段,大多数协议都采用这个方法)。
- 接收方需要进行差错检验、肯定确认、否定确认,发送方重传。
- 停等协议效率低下、可以采用流水线技术
- 在流水线技术中,差错恢复有两种基本方法:回退N步(GBN、也叫滑动窗口协议,包含使用序号、累积确认、检验和以及超时/重传操作)、选择重传(SR)。
- 自动重传请求协议ARQ,正确返回ACK,错误返回NAK。当发送方无法辨别反回的是ACK或为NAK时,自动重传(加入分组编号字段,大多数协议都采用这个方法)。
-
TCP连接,提供的是全双工服务,只在端系统中运行,中间路由器对TCP是完全视而不见的。面向连接、流量控制、可靠传输。
-
TCP报文段结构
RST、SYN、FIN比特用于连接的建立与拆除。32位序号为该报文段,确认序号为主机A希望从主机B收到的下一字节序号。最大报文段长度(MSS),是报文段里应用层数据报的长度,不包含TCP头部。因为最大链路层帧长度为1500字节,因为TCP与IP的头部通常占40字节,所以MSS典型值为1460字节。- TCP在IP不可靠的尽力而为服务上创建了一种可靠数据传输服务。
- 连接过程三次握手
- 标识位SYN置为1,客户生成随机序列号seq=client_isn.
- 服务器为该TCP连接分配缓存和变量,返回SYN=1,服务器初始序号seq=server_isn,确认序号为ack=client_isn+1,称为SYNACK报文段.
- 收到SYNACK报文段后,客户也要给该连接分配缓存与变量。对允许连接的报文段返回确认。返回确认序号ack=server_isn+1,SYN=0。本次传输可以携带数据(但实际上一般都没有)。
之后的传输SYN都为0
- wireshark与报文段对应图
- 四次挥手
- 当客户想结束连接时,返回FIN=1,服务器再返回确认报文和终止报文FIN=1,客户最后对服务器的终止报文进行确认。
- 当发送FIN数据报时,则表示该主机不会发送数据,但仍然可以接受数据。当双方都确认FIN后,就可以结束连接。
-
拥塞控制方法
- 端到端拥塞控制
网络层没有为运输层拥塞控制提供显示帮助,通过TCP采用这个方法(通过超时或者三次冗余确认得知网络拥塞,TCP会减小窗口大小,建议增加往返时延值来作为拥塞的指标) - 网络辅助的拥塞控制
路由器向发送方提供关于网络拥塞状态的显式反馈信息。通常路由器标识或更新从发送方流向接收方的分组中的某个字段来指示拥塞的产生。
- 端到端拥塞控制
-
TCP拥塞控制算法包括:慢启动(MSS从小到大)、拥塞避免、快速恢复(推荐实现,非必须)。
4.网络层
- 网络层能被分为两个相互作用的部分:数据平面(数据转发、物理实现、纳秒尺度运行)、控制平面(路由选择、软件实现、毫秒与秒尺度运行)。
- 转发是指将分组从一个输入链路接口转移到适当的输出链路接口的路由器本地动作,一般由硬件实现,时间很短(几纳秒)。
- 路由选择是指确定分组从源到目的地所采取的端路径的网络范围处理过程,一般有软件实现,通常为几秒。
- 路由器体系结构:1、输入端口。2、输出端口。3、交换结构。4、路由选择处理器。
- ipv4数据报格式
协议部分,是在ip数据报到达目的地时才会使用。该字段指出了ip数据报的数据部分应该交给哪个特定的运输层协议。 - ip地址223.1.1.0/24,其中的/24表示32比特中的最左侧24比特定义了子网的地址,称为子网掩码。其他任何要连接到223.1.1.0/24网络的主机都要求其地址具有223.1.1.xxx的形式。
- 在采用CIDR无分类编址之前,ip地址的网络部分只能为8、16、24,这是分类遍址。分别对应ABC类地址。该方法存在着浪费。
- 动态主机配置协议DHCP
-
作用:能使主机每次与网络连接时能够获取相同的ip地址,或者临时的ip地址。可以获得它的子网掩码、第一跳路由器(默认网关)、本地DNS服务器地址。
-
步骤:
- 发现DHCP服务器。使用UDP像网络广播DHCP发现报文。目的地址255.255.255.255,源地址0.0.0.0
- DHCP服务器提供。服务器收到发现报文时,用DHCP提供报文向客户做出反应。可以采用单播或广播方式(由客户端决定)。报文包含收到的发现报文的事务id、向客户推荐的ip地址、网络掩码以及ip地址租用期(一般为几小时或几天)。
- DHCP请求。客户从一个或者多个服务器提供中选择一个,并发送DHCP请求报文进行响应,回显配置参数。
- DHCP ACK。服务器用DHCP ACK报文对DHCP请求报文进行响应,证实所要求的参数。
-
缺点:每当节点连到一个新的子网时,会获得一个新的ip地址。
-专用地址,局域网中使用的可重用的地址。不能接入互联网。需要使用NAT才能接入互联网。copy- 1
- 2
- 3
10.0.0.0——10.255.255.255 172.16.0.0——172.31.255.255 192.168.0.0——192.168.255.255
-
- ARP协议,地址解析协议,是介于链路层到网络层之间的协议,它的作用是为了解析IP地址到MAC地址的映射,用于数据链路层使用。每台主机都维护一个ARP缓存表可以用
arp -a
命令查看。 - 网络地址转换NAT,NAT路由器主要利用其端口号响应局域网内的主机请求,建立NAT转换表进行标志每一次请求。
- 自治系统AS内部的路由选择协议:OSPF(开放最短路径优先)、RIP
- 自治系统之间的路由选择:BGP
- ICMP因特网控制报文协议,用来实现差错报告、网络探寻。
- 差错报文,包括五种类型:终点不可达、源点抑制(不再使用)、时间超过TTL=0(应用tarceroute采用,跟踪一个源点到终点的路径)、参数问题、改变路由(重定向到更好的路由器)
- 询问报文,回送请求和回答报文(测试目的地址是否可达以及相关状态,ping采用这个,测试两个主机间的连通性),时间戳请求和回答报文。
5.数据链路层

源地址与目的地址都是MAC地址。
在该协议中,数据部分长度最大为1500字节,成为最大传输单元MTU。所以IP数据报不能超过该大小。
FCS帧检验序列,是一段4个字节的循环冗余校验码。
本文作者:oniisan
本文链接:https://www.cnblogs.com/oniisan/p/network.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步