原文连接:计算机网络基础知识总结
看到一篇比较详细的将计网基础的文章,下面是按照该文章自行梳理了一番,便于学习,侵删。
一、计算机网络体系结构
1. 计算机网络常见层次划分
2. OSI七层模型
-
物理层(Physical Layer)
物理层的主要任务是激活、维持、关闭通信端点之间的机械特性(指明接口所用接线器的形状和尺寸、引脚数目和排列、固定和锁定装置等)、电气特性(指明在接口电缆上的各条线上出现的电压范围)、功能特性(指明某条线上出现的某一电平的电压的意义)以及过程特性(指明对于不同功能的各种可能事件的出现顺序)。该层为上层协议提供了一个传输数据的可靠的物理媒体,确保原始的数据可以在各种物理媒体上传输。
物理层中两个重要的设备:中继器(也叫放大器,Repeater)和集线器。 -
数据链路层(Data Link Layer)
数据链路层最基本的服务是将源自网络层的数据可靠地传输到相邻节点的目标网络层。
数据链路层中主要解决三个问题:
封装成帧: 在网络层下发的IP数据报中添加首部和尾部。首部和尾部一个重要的作用是帧定界(即确定帧的界限),开始帧定界符SOH,结束帧定界符EOT。
透明传输: 透明传输是指无论什么样比特组合的数据在经过数据链路层时都能按照原样没有差错的通过,这就要设法使数据中可能出现与帧定界符相同的比特组合不被解析为定界符。解决的方法是在数据中出现该比特组合的前面插入一个转义字符ESC(如果转义字符也出现在数据中,就在前面插入转义字符,当接收端收到两个连续转义字符时就删掉一个)。
差错检测
数据链路层中的基本数据单位是帧,主要的协议是以太网协议,其中有两个重要的设备是网桥和交换机 -
网络层(Network Layer)
网络层通过路由选择算法,为报文或分组通过通信子网选择最适当的路径。
网络层的基本数据单位为IP数据报,主要包含的协议有IP协议(Internet Protocol,因特网互联协议)、ICMP协议(Inernet Control Message Protocol,因特网控制报文协议)、ARP协议(Address Resolution Protocol,地址解析协议)等。
网络层中重要的设备是路由器。 -
传输层(Transport Layer)
传输层负责将上层数据分段并提供端到端的、可靠或不可靠的传输。此外,传输层还有处理端到端的差错控制和流量控制问题。
传输层的任务是根据通信子网的特性,最佳的利用网络资源,为两个端系统的会话层之间提供建立、维护、取消传输连接的功能。
网络层只是根据网络地址将源结点发出的数据包传送到目的结点,而传输层则负责将数据可靠的传送到相应的端口。
传输层包括的主要协议有:TCP协议(Transmission Control Protocol,传输控制协议)、UDP协议(User Datagram Protocol,用户数据报协议)。
传输层中重要的一个设备是网关(gateway)。 -
会话层
会话层管理主机之间的会话进程,即负责建立、管理、终止进程之间的会话。会话层还利用在数据中插入校验点来实现数据的同步。 -
表示层
表示层对上层数据或信息进行表换以保证一个主机应用层信息可以被另一个主机的应用程序理解。表示层的数据转化包括数据的加密、压缩、格式转换等。 -
应用层
为操作系统或网络应用程序提供网络服务的接口。
会话层、表示层和应用层的数据传输基本单位都是报文,其中主要包含的协议有FTP(文件传送协议)、DNS(域名解析协议)、SMTP(邮件传送协议)、HTTP协议(超文本传输协议)。
二、IP地址及网络划分
1. IP地址
IP地址就是给互联网上的每一台主机(或路由器)的每一个接口分配一个在全世界范围内唯一的32位标识符。
两级IP地址: {<网络号>,<主机号>}
IP地址分类:
- A类地址:初始位为0,网络号有8位(一个字节),主机号有24位,是大型网络地址,地址范围0.0.0.0~127.255.255.255。
- B类地址:初始位为10,网络号有16位,主机号16位,是中型网络地址,地址范围128.0.0.0~191.255.255.255。
- C类地址:初始位为110,网络号有24位,主机号有8位,是小型网络地址,地址范围为192.0.0.0~223.255.255.255。
- D类地址:初始位为1110,地址范围为224.0.0.0~255.255.255.255,属于多播地址(用于一对多的通信)。
- E类地址:初始位为1111,为保留地址,供以后使用。
A、B、C类地址都是单播地址(一对一通信)。
一些特殊的IP地址
- 0.0.0.0:IP地址中0.0.0.0表示this,意思是”本网络“。
- 127.0.0.0:回环地址,用于对本地软件的回环测试
- 255.255.255.255:只能用于本地网络的广播地址。
IP地址的一些特点
- 每一个IP地址都由网络号和主机号两部分构成,这样的好处一是IP地址管理机构在分配IP地址时只分配网络号,主机号由得到该网络号的单位自行分配,二是路由器仅根据目的主机所连的网络号来转发分组,减少路由表所占存储空间以及查找路由表的时间。
- 当一台主机同时连接到两个网络上时,该主机就必须同时具有两个相应的IP地址,这样的主机称为多归属主机。
- 用转发器或网桥连接起来的若干个局域网仍然是一个网络(一个网络是指具有相同网络号的主机集合)
- 在IP地址中,所有分配到网络号的网络都是平等的。
2. 划分子网和子网掩码
划分子网
- 在IP地址上增加一个子网号字段,使两级IP地址变成三级IP地址,这种做法称为划分子网。
- 划分子网后这个单位对外仍然表现为一个网络,在单位内部变成三级IP地址。
- 划分子网只是把主机号这部分进行再划分,而不改变IP地址原来的网络号。
子网掩码
子网掩码是用于标识两个IP地址是否属于同一个子网的。
子网掩码也是一个32位二进制的地址,其中1代表网络位,0代表主机位。如果两个IP地址分别与子网掩码按位与之后结果相同,说明它们属于同一个子网。
A类地址的类子网掩码:255.0.0.0
B类地址的类子网掩码:255.255.0.0
C类地址的类子网掩码:255.255.255.0
如何计算子网掩码
三、TCP协议、UDP协议
1. UDP协议
UDP协议,即用户数据报协议,是在IP协议的数据报服务之上增加了一些功能,包括复用、分用和差错检测。
UDP协议的特点:
- UDP是无连接的,即发送数据之前不需要建立连接,减少了开销和发送之前的时延。
- UDP是尽最大努力交付的,即不保证可靠交付。
- UDP是面向报文的,UDP对应用程序交下来的报文,在添加首部之后就直接向下交付给IP层;对IP层交上来的UDP用户数据报,去除首部之后就原封不动的交给上层。也就是说,UDP一次交付一个完整的报文。
- UDP没有拥塞控制,因此网络出现的拥塞不会使源主机的发送速率降低。这对于很多要求源主机以恒定速率发送数据、允许网络拥塞丢失一些数据,但不允许数据有太大时延的应用来说正好合适(比如IP电话、实时视频会议等)。
- UDP支持一对一、一对多、多对一、多对多的交互通信。
- UDP的首部开销小,只有8个字节。
UDP首部格式
- 总长度8个字节,由4个字段组成,每个字段长度都是两个字节。
- 源端口: 源端口号,在需要对方回信时使用,不需要时可用全0;
- 目的端口: 目的端口号,在终点交付报文时必须使用;
- 长度: UDP用户数据报的长度,最小值位8(仅有首部);
- 检验和: 检验UDP用户数据报在传输中是否有错,有错则丢弃。
2. TCP协议
TCP协议,即传输控制协议。TCP协议相对于UDP协议来说要复杂,先来看看它的一些主要特点:
- TCP是面向连接的运输层协议,在应用程序使用TCP协议之前必须先建立TCP连接,在传送数据结束之后必须释放已建立的连接。
- 每条TCP连接只能有两个端点,点对点传输。
- TCP提供可靠交付的服务,无差错、不丢失、不重复且按序到达。
- TCP是面向字节流的。TCP中的流是指流入到进程或从进程流出的字节序列。 TCP把应用程序交下来的数据仅仅看成是一连串无结构的字节流,在发送时也是根据当前网络拥塞程度和窗口大小发送一定的字节,而不关心一整个报文。
套接字socket——TCP连接的端点。
端口号拼接到IP地址即构成了套接字。
socket = ( IP地址:端口号 )
每一条TCP连接唯一地被通信两端的两个端点(即两个套接字)所确定。即:
TCP连接 ::= {socket1, socket2} = {(源IP:源端口), (目的IP:目的端口)}
TCP报文段首部
TCP虽然是面向字节流的,但TCP传送的数据单元是报文段。
TCP报文段首部的前20个字节是固定的(TCP报文首部的最小长度是20),后面4n个字节是根据需要而增加的选项。
首部字段
- 源端口和目的端口: 各占两个字节。
- 序号: 占4个字节。指本报文段所发送的数据的第一个字节的序号。
- 确认号: 占4字节。指期望收到对方下一个报文段的第一个数据字节的序号。**若确认号为N,表明到序号N-1为止的所有数据都已经正确收到。
- 数据偏移: 占4位(一个字节8位)。实际含义是指出报文段首部的长度。
- 保留: 占6位,保留位今后使用。目前置为0。
- 紧急URG: 当URG=1时,该字段有效。该字段表明此报文段中有紧急数据,应尽快传送。
- 确认ACK: 仅ACK=1时,确认号字段才有效。
- 同步SYN: 当SYN=1而ACK=0时,表明这是一个请求连接报文。若对方同意建立连接,则应该在响应的报文段中使用SYN=1和ACK=1。
- 终止FIN: 用于释放一个连接。当FIN=1时,表明此报文段发送方的数据已经发送完毕,并要求释放运输连接。
- 窗口: 占2字节。窗口指的是发送方的接收窗口,即发送方能接受接收方发过来多少数据。
- 检验和: 占2字节。
3. TCP连接建立(三次握手)
TCP连接过程中主要要解决三个问题:
- 要使每一方都能够确知对方的存在。
- 要允许双方协商一些参数(比如窗口大小等)。
- 能够对运输实体资源进行分配。
TCP连接建立采用客户-服务器 方式。我们先直接来看图:
- step1:(一次握手) 客户端向服务器发出一个SYN=1的连接请求,同时选择一个初始序号seq=x。该请求消耗一个序号。一次握手的目的是客户端请求建立连接。
- step2:(二次握手) 服务器向客户端返回一个SYN=1,ACK=1的响应报文,同时选择一个初始序号seq=y。该响应消耗一个序号。二次握手的目的是服务器响应客户端请求。
- step3:(三次握手) 客户端向服务器发送一个ACK=1的确认报文,**表示自己确定收到了来自服务器的响应。**该报文不消耗序号。
为什么是三次握手?
- 我们知道,TCP是可靠的、全双工的传输协议,那么要做到这一点的前提就是连接请求方和连接响应方都必须确知自己以及对方是能够发送并接受信息的。而三次握手就是保证这一条件的最低握手次数。(第一次握手,发送方确认自己可以发送,接收方确认对方可以发送,自己可以接收;第二次握手,接收方确认自己可以发送,发送方确认接收方可以发送;第三次握手,接收方确认发送方可以接收)
- 防止已失效的连接请求报文突然又传送到服务器,造成资源浪费
如果客户端发送的旧的SYN连接请求比新的要早到达,此时服务器端会按照这个SYN请求给出响应。客户端通过比较响应中的ack和自己期望的(最新的)ack就可以判断是否出现异常,如果出现异常则发起RST报文终止连接。 - 同步双方的初始序列号
4. TCP连接释放(四次挥手)
- step1: 客户端向服务端发送一个FIN=1,seq=u的连接释放报文,然后进入FIN-WAIT-1状态,此时客户端不能再发送数据,只能接收数据。
- step2: 服务器收到客户端的连接释放报文之后返回一个ACK=1,ack=u+1,的确认报文,然后进入CLOSE-WAIT状态,在这个状态下服务器仍能够发送数据。客户端收到服务器端的确认之后就进入FIN-WAIT-2状态。
- step3: 当服务器端的数据发送完毕之后,会向客户端发送一个FIN=1,ACK=1的连接释放报文,告知客户端它也要关闭连接了。此时服务器端进入LAST-ACK状态,等待客户端确认连接释放报文。
- step4: 客户端收到服务器端的连接释放报文之后,必须对此发出一个ACK=1的确认报文。服务器收到这个确认报文之后就关闭服务器端到客户端的连接了。客户端需要等待2MSL之后便可真正释放连接。至此,TCP连接释放完毕。
为什么要等待2MSL(MSL:Maximum Segment LifeTime,报文最大生存时间)?
- 为了确保客户端发送的最后一个ACK报文能够到达服务器端。这个报文段有可能会丢失,因而处在LAST-ACK状态的服务器在一段时间内未收到ACK确认报文,就会超时重传FIN=1,ACK=1的连接释放报文。然后客户端会重新进入2MSL计时。
注意在连接释放过程总,被动释放连接的一方结束连接的时间更早。
四、HTTP协议
1.HTTP协议
HTTP协议是面向事务的应用层协议。 是万维网能够可靠地交换文件的重要基础。
HTTP本身是无连接的。
2.HTTP报文
- 请求报文: 从客户向服务器发送的报文。请求报文常见字段有请求方法、URL、版本等。
- 响应报文: 从服务器端到客户端的回答。响应报文常见字段有版本、状态码等。
- 响应报文和请求报文都由三个部分组成——开始行,首部行,实体主体。
请求报文的常用方法
方法 | 意义 |
---|---|
option | 请求一些选项的信息 |
get | 请求读取URL所标识的信息 |
post | 给服务器添加信息 |
put | 在指明的url下存储一个文档 |
delete | 删除指明的URL所标志的资源 |
get和post的区别
- 从显式的区别来说,get的参数会直接连接到Url中,而post的请求参数则放在请求头中。
- 本质上来说,get和post底层都是tcp,本质上是没有区别的,只不过我们人为的赋予了它一些语义。
- 至于get有参数长度限制之类的,这个是由浏览器规定的,与get和Post请求本身无关。