计算机网络基础知识总结
计算机网络学习的核心内容就是网络协议的学习。网络协议是为计算机网络中进行数据交换而建立的规则、标准或者说是约定的集合。因为不同用户的数据终端可能采取的字符集是不同的,两者需要进行通信,必须要在一定的标准上进行。一个很形象地比喻就是我们的语言,我们大天朝地广人多,地方性语言也非常丰富,而且方言之间差距巨大。A 地区的方言可能 B 地区的人根本无法接受,所以我们要为全国人名进行沟通建立一个语言标准,这就是我们的普通话的作用。同样,放眼全球,我们与外国友人沟通的标准语言是英语,所以我们才要苦逼的学习英语。
计算机网络协议同我们的语言一样,多种多样。而 ARPA 公司与 1977 年到 1979 年推出了一种名为 ARPANET 的网络协议受到了广泛的热捧,其中最主要的原因就是它推出了人尽皆知的 TCP/IP 标准网络协议。目前 TCP/IP 协议已经成为 Internet 中的 “通用语言”,下图为不同计算机群之间利用 TCP/IP 进行通信的示意图。

网络层次划分
为了使不同计算机厂家生产的计算机能够相互通信,以便在更大的范围内建立计算机网络,国际标准化组织(ISO)在 1978 年提出了 “开放系统互联参考模型”,即著名的 OSI/RM 模型(Open System Interconnection/Reference Model)。它将计算机网络体系结构的通信协议划分为七层,自下而上依次为:物理层(Physics Layer)、数据链路层(Data Link Layer)、网络层(Network Layer)、传输层(Transport Layer)、会话层(Session Layer)、表示层(Presentation Layer)、应用层(Application Layer)。其中第四层完成数据传送服务,上面三层面向用户。
除了标准的 OSI 七层模型以外,常见的网络层次划分还有 TCP/IP 四层协议以及 TCP/IP 五层协议,它们之间的对应关系如下图所示:

OSI 七层网络模型
TCP/IP 协议毫无疑问是互联网的基础协议,没有它就根本不可能上网,任何和互联网有关的操作都离不开 TCP/IP 协议。不管是 OSI 七层模型还是 TCP/IP 的四层、五层模型,每一层中都要自己的专属协议,完成自己相应的工作以及与上下层级之间进行沟通。由于 OSI 七层模型为网络的标准层次划分,所以我们以 OSI 七层模型为例从下向上进行一一介绍。

物理层(Physical Layer)
激活、维持、关闭通信端点之间的机械特性、电气特性、功能特性以及过程特性。该层为上层协议提供了一个传输数据的可靠的物理媒体。简单的说,物理层确保原始的数据可在各种物理媒体上传输。物理层记住两个重要的设备名称,中继器(Repeater,也叫放大器)和集线器。
数据链路层(Data Link Layer)
数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。为达到这一目的,数据链路必须具备一系列相应的功能,主要有:如何将数据组合成数据块,在数据链路层中称这种数据块为帧(frame),帧是数据链路层的传送单位;如何控制帧在物理信道上的传输,包括如何处理传输差错,如何调节发送速率以使与接收方相匹配;以及在两个网络实体之间提供数据链路通路的建立、维持和释放的管理。数据链路层在不可靠的物理介质上提供可靠的传输。该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。
有关数据链路层的重要知识点:
- 数据链路层为网络层提供可靠的数据传输;
- 基本数据单位为帧;
- 主要的协议:以太网协议;
- 两个重要设备名称:网桥和交换机。
网络层(Network Layer)
网络层的目的是实现两个端系统之间的数据透明传送,具体功能包括寻址和路由选择、连接的建立、保持和终止等。它提供的服务使传输层不需要了解网络中的数据传输和交换技术。如果您想用尽量少的词来记住网络层,那就是 “路径选择、路由及逻辑寻址”。
网络层中涉及众多的协议,其中包括最重要的协议,也是 TCP/IP 的核心协议 ——IP 协议。IP 协议非常简单,仅仅提供不可靠、无连接的传送服务。IP 协议的主要功能有:无连接数据报传输、数据报路由选择和差错控制。与 IP 协议配套使用实现其功能的还有地址解析协议 ARP、逆地址解析协议 RARP、因特网报文协议 ICMP、因特网组管理协议 IGMP。具体的协议我们会在接下来的部分进行总结,有关网络层的重点为:
- 网络层负责对子网间的数据包进行路由选择。此外,网络层还可以实现拥塞控制、网际互连等功能;
- 基本数据单位为 IP 数据报;
- 包含的主要协议:
- IP 协议(Internet Protocol,因特网互联协议);
- ICMP 协议(Internet Control Message Protocol,因特网控制报文协议);
- ARP 协议(Address Resolution Protocol,地址解析协议);
- RARP 协议(Reverse Address Resolution Protocol,逆地址解析协议)。
- 重要的设备:路由器。
传输层(Transport Layer)
第一个端到端,即主机到主机的层次。传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的传输。此外,传输层还要处理端到端的差错控制和流量控制问题。
传输层的任务是根据通信子网的特性,最佳的利用网络资源,为两个端系统的会话层之间,提供建立、维护和取消传输连接的功能,负责端到端的可靠数据传输。在这一层,信息传送的协议数据单元称为段或报文。
网络层只是根据网络地址将源结点发出的数据包传送到目的结点,而传输层则负责将数据可靠地传送到相应的端口。
有关网络层的重点:
- 传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的传输以及端到端的差错控制和流量控制问题;
- 包含的主要协议:TCP 协议(Transmission Control Protocol,传输控制协议)、UDP 协议(User Datagram Protocol,用户数据报协议);
- 重要设备:网关。
会话层
会话层管理主机之间的会话进程,即负责建立、管理、终止进程之间的会话。会话层还利用在数据中插入校验点来实现数据的同步。
表示层
表示层对上层数据或信息进行变换以保证一个主机应用层信息可以被另一个主机的应用程序理解。表示层的数据转换包括数据的加密、压缩、格式转换等。
应用层
为操作系统或网络应用程序提供访问网络服务的接口。
会话层、表示层和应用层重点:
- 数据传输基本单位为报文;
- 包含的主要协议:FTP(文件传送协议)、Telnet(远程登录协议)、DNS(域名解析协议)、SMTP(邮件传送协议),POP3 协议(邮局协议),HTTP 协议(Hyper Text Transfer Protocol)。
上面是传统的协议,比较有前途的新协议有:MQTT协议、HTTP/2、HTTP3、WebSocket、Socket5、VMess协议等等
IP 地址
网络地址
IP 地址由网络号(包括子网号)和主机号组成,网络地址的主机号为全 0,网络地址代表着整个网络。
不过目前在公网已经不区分网络号和主机号了,下面详细讲
广播地址
广播地址通常称为直接广播地址,是为了区分受限广播地址。
广播地址与网络地址的主机号正好相反,广播地址中,主机号为全 1。当向某个网络的广播地址发送消息时,该网络内的所有主机都能收到该广播消息。
组播地址
先回忆下 A,B,C,D 类地址吧:
A 类地址以 00 开头,第一个字节作为网络号,地址范围为:0.0.0.0~127.255.255.255;
B 类地址以 10 开头,前两个字节作为网络号,地址范围是:128.0.0.0~191.255.255.255;
C 类地址以 110 开头,前三个字节作为网络号,地址范围是:192.0.0.0~223.255.255.255。
D 类地址以 1110 开头,地址范围是 224.0.0.0~239.255.255.255,D 类地址作为组播地址(一对多的通信);
E 类地址以 1111 开头,地址范围是 240.0.0.0~255.255.255.255,E 类地址为保留地址,供以后使用。
注:只有 A,B,C 有网络号和主机号之分,D 类地址和 E 类地址没有划分网络号和主机号。
255.255.255.255
该 IP 地址指的是受限的广播地址。受限广播地址与一般广播地址(直接广播地址)的区别在于,受限广播地址只能用于本地网络,路由器不会转发以受限广播地址为目的地址的分组;一般广播地址既可在本地广播,也可跨网段广播。例如:主机 192.168.1.1/30 上的直接广播数据包后,另外一个网段 192.168.1.5/30 也能收到该数据报;若发送受限广播数据报,则不能收到。
注:一般的广播地址(直接广播地址)能够通过某些路由器(当然不是所有的路由器),而受限的广播地址不能通过路由器。
0.0.0.0
常用于寻找自己的 IP 地址(在某些软件的设置也可以代表任何的IP),例如在我们的 RARP,BOOTP 和 DHCP 协议中,若某个未知 IP 地址的机器想要知道自己的 IP 地址,它就以 255.255.255.255 为目的地址,向本地范围(具体而言是被各个路由器屏蔽的范围内)的服务器发送 IP 请求分组。
回环地址
127.0.0.0/8 被用作回环地址,回环地址表示本机的地址,常用于对本机的测试,用的最多的是 127.0.0.1。
A、B、C 类私有地址
私有地址 (private address) 也叫专用地址,它们不会在全球使用,只具有本地意义。
A 类私有地址:10.0.0.0/8,范围是:10.0.0.0~10.255.255.255
B 类私有地址:172.16.0.0/12,范围是:172.16.0.0~172.31.255.255
C 类私有地址:192.168.0.0/16,范围是:192.168.0.0~192.168.255.255
上面之所以说现在不区分网络号和主机号的原因是IP资源紧缺,不能为所有设备分配一个私有地址以外的IP,所有现在不区分IP的类别,每一个私有地址以外的IP都可以作为一个主机号。然后通过NAT(地址转换)将一个局域网连接到一个IP。不过现在的情况可能会有好几层地址转换,比如ISP(网络服务提供商)会给你所在的楼层或者所在的整个小区分配一个IP,然后通过NAT连接到整个楼层或者整个小区,当然网线拉进你的家里,还会通过路由器NAT之后再分配出一个局域网,所有你使用的设备可能位于局域网中的局域网中的…(套娃实锤了)。NAT可以理解为将一个IP地址分出多个局域网IP
子网掩码及网络划分
因为现在普遍使用的都是NAT技术,子网划分变得比较少用,所以这里不详细讲了(主要是那玩意计算起来是真的麻烦),如果有兴趣可以百度了解划分的方法。
ARP/RARP 协议
地址解析协议,即 ARP(Address Resolution Protocol),是根据 IP 地址获取物理地址的一个 TCP/IP 协议。主机发送信息时将包含目标 IP 地址的 ARP 请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该 IP 地址和物理地址存入本机 ARP 缓存中并保留一定时间,下次请求时直接查询 ARP 缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送 ARP 应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机 ARP 缓存;由此攻击者就可以向某一主机发送伪 ARP 应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个 ARP 欺骗。ARP 命令可用于查询本机 ARP 缓存中 IP 地址和 MAC 地址的对应关系、添加或删除静态对应关系等。
ARP 工作流程举例:
主机 A 的 IP 地址为 192.168.1.1,MAC 地址为 0A-11-22-33-44-01;
主机 B 的 IP 地址为 192.168.1.2,MAC 地址为 0A-11-22-33-44-02;
当主机 A 要与主机 B 通信时,地址解析协议可以将主机 B 的 IP 地址(192.168.1.2)解析成主机 B 的 MAC 地址,以下为工作流程:
- 根据主机 A 上的路由表内容,IP 确定用于访问主机 B 的转发 IP 地址是 192.168.1.2。然后 A 主机在自己的本地 ARP 缓存中检查主机 B 的匹配 MAC 地址。
- 如果主机 A 在 ARP 缓存中没有找到映射,它将询问 192.168.1.2 的硬件地址,从而将 ARP 请求帧广播到本地网络上的所有主机。源主机 A 的 IP 地址和 MAC 地址都包括在 ARP 请求中。本地网络上的每台主机都接收到 ARP 请求并且检查是否与自己的 IP 地址匹配。如果主机发现请求的 IP 地址与自己的 IP 地址不匹配,它将丢弃 ARP 请求。
- 主机 B 确定 ARP 请求中的 IP 地址与自己的 IP 地址匹配,则将主机 A 的 IP 地址和 MAC 地址映射添加到本地 ARP 缓存中。
- 主机 B 将包含其 MAC 地址的 ARP 回复消息直接发送回主机 A。
- 当主机 A 收到从主机 B 发来的 ARP 回复消息时,会用主机 B 的 IP 和 MAC 地址映射更新 ARP 缓存。本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。主机 B 的 MAC 地址一旦确定,主机 A 就能向主机 B 发送 IP 通信了。
逆地址解析协议,即 RARP,功能和 ARP 协议相对,其将局域网中某个主机的物理地址转换为 IP 地址,比如局域网中有一台主机只知道物理地址而不知道 IP 地址,那么可以通过 RARP 协议发出征求自身 IP 地址的广播请求,然后由 RARP 服务器负责回答。
RARP 协议工作流程:
- 给主机发送一个本地的 RARP 广播,在此广播包中,声明自己的 MAC 地址并且请求任何收到此请求的 RARP 服务器分配一个 IP 地址;
- 本地网段上的 RARP 服务器收到此请求后,检查其 RARP 列表,查找该 MAC 地址对应的 IP 地址;
- 如果存在,RARP 服务器就给源主机发送一个响应数据包并将此 IP 地址提供给对方主机使用;
- 如果不存在,RARP 服务器对此不做任何的响应;
- 源主机收到从 RARP 服务器的响应信息,就利用得到的 IP 地址进行通讯;如果一直没有收到 RARP 服务器的响应信息,表示初始化失败。
路由选择协议
常见的路由选择协议有:RIP 协议、OSPF 协议。
RIP 协议 :底层是贝尔曼福特算法,它选择路由的度量标准(metric) 是跳数,最大跳数是 15 跳,如果大于 15 跳,它就会丢弃数据包。
OSPF 协议 :Open Shortest Path First 开放式最短路径优先,底层是迪杰斯特拉算法,是链路状态路由选择协议,它选择路由的度量标准是带宽,延迟。
这两种算法有点复杂但是理解起来并不难,有兴趣可以上网查一下详细是怎样工作的。
TCP/IP 协议
TCP/IP 协议是 Internet 最基本的协议、Internet 国际互联网络的基础,由网络层的 IP 协议和传输层的 TCP 协议组成。通俗而言:TCP 负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而 IP 是给因特网的每一台联网设备规定一个地址。
IP 层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层 —TCP 或 UDP 层;相反,IP 层也把从 TCP 或 UDP 层接收来的数据包传送到更低层。IP 数据包是不可靠的,因为 IP 并没有做任何事情来确认数据包是否按顺序发送的或者有没有被破坏,IP 数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。
TCP 是面向连接的通信协议,通过三次握手建立连接,通讯完成时要拆除连接,由于 TCP 是面向连接的所以只能用于端到端的通讯。TCP 提供的是一种可靠的数据流服务,采用 “带重传的肯定确认” 技术来实现传输的可靠性。TCP 还采用一种称为 “滑动窗口” 的方式进行流量控制,所谓窗口实际表示接收能力,用以限制发送方的发送速度。
TCP 报文首部格式:

关于报头中的各部分的简介概括:
源端口和目的端口
各占2个字节,分别写入源端口号和目的端口号,TCP的分用功能是通过端口实现的。
比如一般网站都是80端口,那么向一个网站发送请求数据的话,tcp包里面的目的端口就是80,源地址由你的浏览器提供,端口号不确定,比如你的浏览器提供了一个12345的端口号那么这个tcp包的源端口就是12345。当然请求后会发送一个响应数据回来,因为由网页那边发过来浏览器拿到的tcp包的源端口就是80,目的端口就是12345。
序号
因为一个tcp包不能放下太多信息所以会将tcp拆开,打上序号将多个tcp包同时发送。系统会根据自己的算法处理,进行拥塞控制,比如新版的Linux系统(4.9开始)就内置了两种算法:默认的TCP控制、谷歌的BBR算法
两个算法的区别可以看知乎上一个中国科学技术大学的计算机软件与理论博士的高赞回答
不过想看懂这个回答你可能还需要百度查一下比较简单的拥塞控制算法
确认ACK(ACKnowledgment)
仅当ACK=1是确认号字段才有效。当ACK=0时,确认号无效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置为1
复位RST(ReSeT)
当RST=1时,表明TCP连接中出现较为严重的差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。RST置为1还用来拒绝一个非法的报文段或拒绝打开一个连接。RST也可以称为重建位或重置位。
同步SYN(SYNchronization)
在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接报文请求段。对方若是同意建立连接,则应在响应的报文段中使用SYN=1和ACK=1。因此,SYN置为1就表示这是一个连接请求或连接接收报文。
终止FIN(FINis,意思是“完”、“终”)
用来释放一个连接。当FIN=1时,表明此报文段的发送方的数据已发送完毕,并要求释放运输连接。
上面几个最常用到而且需要了解的,其他的有时候也需要用到,可以百度查看详细说明
最经典的面试题:TCP 协议的三次握手和四次挥手
只要涉及到网络开发,基本上这个问题的必问的,TCP经过几次握手建立连接,断开时要经过几次挥手?
这里用一张图来详细说明每一步:

TCP 连接建立过程 - 三次握手:
- 首先 Client 端发送连接请求报文(SYN位为1)
- Server 端接受连接后回复 ACK(ACK位为1) 报文,并为这次连接分配资源
- Client 端接收到 ACK 报文后也向 Server 段发生 ACK 报文,并分配资源,这样 TCP 连接就建立了。
然后服务端和客户端就可以开心的交流♂了
TCP 连接断开过程 - 四次挥手:
- 假设 Client 端发起中断连接请求,也就是发送 FIN(FIN位为1) 报文
- Server 端接到 FIN 报文后,意思是说 “我 Client 端没有数据要发给你了”,但是如果你还有数据没有发送完成,则不必急着关闭 Socket,可以继续发送数据。所以你先发送 ACK,”告诉 Client 端,你的请求我收到了,但是我还没准备好,请继续你等我的消息”
- 这个时候 Client 端就进入 FIN_WAIT 状态,继续等待 Server 端的 FIN 报文。当 Server 端确定数据已发送完成,则向 Client 端发送 FIN 报文,”告诉 Client 端,好了,我这边数据发完了,准备好关闭连接了”
- Client 端收到 FIN 报文后,”就知道可以关闭连接了,但是他还是不相信网络,怕 Server 端不知道要关闭,所以发送 ACK 后进入 TIME_WAIT 状态,如果 Server 端没有收到 ACK 则可以重传
- Server 端收到 ACK 后,就知道可以断开连接了,Client 端等待了 2MSL 后依然没有收到回复,则证明 Server 端已正常关闭,那好,我 Client 端也可以关闭连接了。
Ok,TCP 连接就这样关闭了!
为什么要三次挥手?
在只有两次 “握手” 的情形下,假设 Client 想跟 Server 建立连接,但是却因为中途连接请求的数据报丢失了,故 Client 端不得不重新发送一遍;这个时候 Server 端仅收到一个连接请求,因此可以正常的建立连接。但是,有时候 Client 端重新发送请求不是因为数据报丢失了,而是有可能数据传输过程因为网络并发量很大在某结点被阻塞了,这种情形下 Server 端将先后收到 2 次请求,并持续等待两个 Client 请求向他发送数据… 问题就在这里,Cient 端实际上只有一次请求,而 Server 端却有 2 个响应,极端的情况可能由于 Client 端多次重新发送请求数据而导致 Server 端最后建立了 N 多个响应在等待,因而造成极大的资源浪费!所以,“三次握手” 很有必要!
为什么要四次挥手?
试想一下,假如现在你是客户端你想断开跟 Server 的所有连接该怎么做?第一步,你自己先停止向 Server 端发送数据,并等待 Server 的回复。但事情还没有完,虽然你自身不往 Server 发送数据了,但是因为你们之前已经建立好平等的连接了,所以此时他也有主动权向你发送数据;故 Server 端还得终止主动向你发送数据,并等待你的确认。其实,说白了就是保证双方的一个合约的完整执行!
UDP 协议
UDP 用户数据报协议,是面向无连接的通讯协议,UDP 数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送,简单来说就是数据会直接想目的端口发送,而且不管对方有没有收到。
UDP 通讯时不需要接收方确认,属于不可靠的传输,可能会出现丢包现象,实际应用中要求程序员编程验证。
UDP 与 TCP 位于同一层,但它不管数据包的顺序、错误或重发。因此,UDP 不被应用于那些使用虚电路的面向连接的服务,UDP 主要用于那些面向查询 — 应答的服务,例如 NFS。相对于 FTP 或 Telnet,这些服务需要交换的信息量较小。
每个 UDP 报文分 UDP 报头和 UDP 数据区两部分。报头由四个 16 位长(2 字节)字段组成,分别说明该报文的源端口、目的端口、报文长度以及校验值。UDP 报头由 4 个域组成,其中每个域各占用 2 个字节,具体如下:
- 源端口号;
- 目标端口号;
- 数据报长度;
- 校验值。
TCP 与 UDP 的区别:TCP 是面向连接的,可靠的字节流服务;UDP 是面向无连接的,不可靠的数据报服务。
不过由于现代的网络服务质量大幅度提高,已经有很多公司比如谷歌和微软都在研究如何使用UDP代替某些TCP服务,因为UDP有一些无与伦比的优势,比如不需要三次握手,能大幅度降低网络延迟,一定程度上减少流量消耗(在网络质量较好的情况)。比如微软和谷歌就在几年前开始一直为可以使用UDP的HTTP/3协议努力,希望几年后能用上更先进从网络技术。
DNS 协议
DNS 是域名系统 (DomainNameSystem) 的缩写,该系统用于命名组织到域层次结构中的计算机和网络服务,可以简单地理解为将 URL 转换为 IP 地址。域名是由圆点分开一串单词或缩写组成的,每一个域名都对应一个惟一的 IP 地址,在 Internet 上域名与 IP 地址之间是一一对应的,DNS 就是进行域名解析的服务器。DNS 命名用于 Internet 等 TCP/IP 网络中,通过用户友好的名称查找计算机和服务。
要记住在网络世界只能使用IP地址,而访问一个域名,比如
baidu.com
,系统会向DNS服务器(通过服务器IP地址)发送数据,询问baidu.com
的IP地址是多少,然后想百度的服务器IP发送数据,从而实现访问百度首页。
NAT 协议
这个上面提到了这个技术,其实原理很简单,路由器能将外网的IP绑定到局域网的IP上面,比如路由器拿到的外网ip是123.123.123.123,局域网里面有两台主机分别是:192.168.1.1和192.168.1.2,那么这两个IP通过NAT绑定后,只要是内部想发送到局域网外部的数据包都会将局域网IP改为外网IP。比如:
- 你想访问百度,你在局域网里面的IP是192.168.1.1,那么你发送到百度的数据包的源地址是192.168.1.1
- 数据包到达你家的路由器,路由器发现192.168.1.1这个地址在NAT映射表里面,对应的值是123.123.123.123
- 那么你的路由器会将数据包里面的源地址192.168.1.1修改为123.123.123.123,并向百度的服务器发送
- 那么百度就会看到一个来自地址为123.123.123.123的机器的请求,然后按照上面的方法建立TCP连接,然后响应数据
你的浏览器就能展示百度的网页了。不过你是否发现了一个弊端?
百度只能知道由123.123.123.123发送的数据,并不知道是这个局域网下那个机器发送的,所以百度并不能主动向你请求建立连接。所以假如我在另一个局域网下,想将一个文件传输给你,是没办法将我的电脑跟你的电脑直接连接的,这时候有一个解决方法就是通过NAT服务器进行代理,你和我都先与服务器进行连接,然后数据就能通过服务器到达你的电脑,这种技术也成为子网穿透。详细方法可以查询百度
DHCP 协议
DHCP 动态主机设置协议(Dynamic Host Configuration Protocol)是一个局域网的网络协议,使用 UDP 协议工作,主要有两个用途:给内部网络或网络服务供应商自动分配 IP 地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。
HTTP 协议
超文本传输协议(HTTP,HyperText Transfer Protocol) 是互联网上应用最为广泛的一种网络协议。
一次HTTP数据传输报错请求和访问,请求包括:
- 请求URL(地址)
- 请求方法
- HTTP协议版本
- 可能会有的一些其他的请求标头和请求信息
有请求就会有响应(除非网络不通或者服务器不想响应你),那么响应数据包括:
- HTTP协议版本
- 状态码(通过这个码判断是否成功等等)
- 一些其他的标头信息,比如时间、服务器的名称、数据是否压缩过等等
HTTP还能涉及到很多方面的知识,详细信息可以查百度
那是那上面的例子,你想访问百度的首页:
- 首先浏览器通过 DNS 解析到 www.baidu.com 的 IP 地址 220.181.27.48,通过这个 IP 地址找到客户端到服务器的路径。客户端浏览器发起一个 HTTP 会话到 220.161.27.48,然后通过 TCP 进行封装数据包,输入到网络层。
- 在客户端的传输层,把 HTTP 会话请求分成报文段,添加源和目的端口,如服务器使用 80 端口监听客户端的请求,客户端由系统随机选择一个端口如 5000,与服务器进行交换,服务器把相应的请求返回给客户端的 5000 端口。然后使用 IP 层的 IP 地址查找目的端。
- 客户端的网络层不用关系应用层或者传输层的东西,主要做的是通过查找路由表确定如何到达服务器,期间可能经过多个路由器,这些都是由路由器来完成的工作,不作过多的描述,无非就是通过查找路由表决定通过那个路径到达服务器。
- 客户端的链路层,包通过链路层发送到路由器,通过邻居协议查找给定 IP 地址的 MAC 地址,然后发送 ARP 请求查找目的地址,如果得到回应后就可以使用 ARP 的请求应答交换的 IP 数据包现在就可以传输了,然后发送 IP 数据包到达服务器的地址。
如果看完并理解这篇文章,详细你已经对计算机网络有一定的了解了,不过这这是基础知识哦,像HTTP这样的协议还包含大量的知识,比如如何加密,选择什么方式进行请求等等,如果需要做网络开发,这些都是需要去了解的,后面我可能会再写一篇HTTP的文章来让你完全了解HTTP到底是怎样的。