其实分层传输数据的过程,我们可以这样理解,自上而下,下面一层会通过添加一个头部来封装上面一层数据,形成一个新的报文。
1. 应用层:报文->运输层
2. 运输层首部信息+报文=运输层报文段->网络层
3. 网络层首部信息(IP,Port)等信息+运输层报文段=网络层数据报->链路层
4. 链路层首部信息以及链路层帧+网络层数据包,这样看来,每一层均为首部信息+有效载荷字段,后者来自于上一层。
应用层协议
Http协议 80
- Http是一个无状态协议,也就是它并不保存关于客户机的任何信息。
2. 持久连接(默认)
- 连接过程同下面的非持久连接,但一次交互完毕后不会关闭连接,而会保持打开,过长时间不使用,服务器再通知断开连接。
- 在连接过程中,一个TCP连接可以实现流水线方式,即请求一个接一个发送,不用等待响应。(默认)
3. 非持久连接
- 客户端80端口发起一个到服务器的TCP连接
- 客户机通过套接字向服务器发送一个Http请求报文,其中包含了请求文件路径名。
- 服务器接收请求报文,找到请求内容,封装到一个Http响应报文,通过套接字向客户机发送响应报文。
- 服务器进程通知TCP连接断开,实际上直到客户端确认收到响应报文后,才会真正断开,这样可以保证传输服务的可靠性。
- 客户端收到Http响应报文,关闭TCP连接,得到请求内容的引用。
非持久连接会给服务器带来严重负担,服务器要分配TCP的缓冲区和变量。
TCP握手过程
- 客户端向服务器发起连接请求报文。
- 服务器接收连接请求,向客户端返回一个响应连接报文。
- 客户端向服务器发送一个确认连接报文,这个报文里还结合一个Http请求报文。(三次握手结束)
- 服务器向客户端返回请求文件的引用。
FTP协议 21
- 客户机建立一个到远程主机的TCP连接,这里我们称为控制连接,用来传输命令等,随后用户通过这个连接向服务器提交自己的用户名密码,服务器端进行验证
- 验证成功后,客户机通过控制连接向服务器端发起一个请求文件传输的命令,服务器端建立一个到客户端的TCP连接,传输数据结束后,关闭这个连接。
1.注意,控制连接从始至终都存在,数据传输连接每一次传输建立一个新的。
2. FTP协议保留用户状态,对用户进行追踪,HTTP不保留,是无状态的。
SMTP协议 25
这里通过一个简单的例子进行讲解,A->B发送一封邮件,我们看看会发生什么?
- A打开自己的本地邮件代理终端,写好了一封情书(邮件)
- A点击了发送按钮,此时A的邮件被”推送”至自己的邮件服务器
- A邮件服务器扫描发现有一封情书啊,于是就建立一个到B服务器的TCP连接,这里注意,这个连接是一个直接连接,中间不会通过中间服务器,就算一个在北极,另一个在南极,也要亲自交到她手上,如果推送没有成功,在接下来的一段时间,A邮件服务器会一直尝试”推送”,若还是失败,就会返回一个失败邮件给A
- 邮件成功到达B邮件服务器,等待B取走
- 这里注意,B打开了电脑,通过IMAP或者POP3或者HTTP协议,”取回”了邮件服务器上的邮件,打开邮件,她开心地晕了过去
整个过程我强调了’推送’和’取回’,SMTP是一个推协议,而从邮件服务器中取回邮件则要通过第5步中的三个协议
DNS域名服务系统 53
提供主机名与IP地址的转换。
- 客户机->第一个服务器之间采用递归查询
- 第一级DNS服务器若没有记录,则向第二级DNS服务器发送请求
- 第二级DNS服务器有则返回结果,没有就返回第三级DNS服务器的地址给第一级服务器,第一级服务器再去给第三级服务器发请求,循环这个操作,直到找到对应的IP
- 第一级DNS服务器反馈这个结果地址给客户端,客户端再去发送请求。
运输层协议 一个进程到另一个进程
TCP与UDP的区别
TCP
- 提供面向连接服务,会在过程中进行三次握手建立TCP连接,这个连接是全双工的。
- 提供可靠数据传输服务,无差错,有序性
- 具有拥塞控制机制
- 可以在应用层为TCP强化一个SSL,大大提高安全系数。
UDP
- UDP不提供非必要服务,即只提供最小服务。
- 提供无连接服务,没有握手过程。
- 不可靠数据传输服务,无法保证报文段可以被接收,也不能保证有序性。
- 无拥塞控制机制。
- 多路分解:将运输层报文段中数据交付到正确的套接字上
- 多路复用:从源主机不同套接字中收集数据块,并为每个数据块都封装上首部信息从而生成报文段,然后将报文段传递到网络层的过程
TCP套接字由一个四元组:源IP,目的IP,源端口,目的端口标识
UDP套接字由一个二元组:目的IP,目的端口标识我们可以看到,2个不同IP地址和端口号的UDP数据包,如果拥有相同二元组,那么会由同一个进程接收,TCP则不会,因为从标记了源端口号和IP地址。
网络层协议 一个主机到另一个主机
提供尽力而为的服务,所以是一个不可靠的过程。
- 虚电路网络:网络层提供链接计算机网络
- 数据报网络:提供无连接的计算机网络
DHCP 动态主机配置协议
连入网络的设备会分配到一个临时的IP地址。
NAT 网络地址转换
有效扩展了IPV4地址的数目,也使得多个使用内部网络的终端对外只有一个共同的IP。
ICMP 互联网控制报文协议
耳熟能详的Ping命令,traceroute命令,都是建立在它的基础上,可以帮助你来判断与对方是否连通
路由器选路算法
- LS Link-State 链路状态选路算法,如Dijkstra算法
- DV Distance-Vector 距离向量算法,如Prim算法
自治系统内部选路
- RIP协议是距离矢量路由选择协议,它选择路由的度量标准(metric)是跳数,最大跳数是15跳,如果大于15跳,它就会丢弃数据包。
- OSPF协议是链路状态路由选择协议,它选择路由的度量标准是带宽,延迟。
RIP的局限性在大型网络中使用所产生的问题:
- RIP的15跳限制,超过15跳的路由被认为不可达
- RIP不能支持可变长子网掩码(VLSM),导致IP地址分配的低效率
- 周期性广播整个路由表,在低速链路及广域网云中应用将产生很大问题
- 收敛速度慢于OSPF,在大型网络中收敛时间需要几分钟
- RIP没有网络延迟和链路开销的概念,路由选路基于跳数。拥有较少跳数的路由总是被选为最佳路由即使较长的路径有低的延迟和开销
RIP没有区域的概念,不能在任意比特位进行路由汇总
相比RIP而言,OSPF更适合用于大型网络:
- 没有跳数的限制
- 支持可变长子网掩码(VLSM)
- 使用组播发送链路状态更新,在链路状态变化时使用触发更新,提高了带宽的利用率
- 收敛速度快
- 具有认证功能
但是OSPF配置复杂。
链路层
所有以太网技术都向网络层提供无连接服务,类似网络层数据报服务和UDP协议。
CSMA/CD协议 以太网多路访问协议
- 任意时刻可以传输,无时隙概念。
- 适配器侦听到有其他适配器正常传输,绝不会传输帧,使用了载波侦听。
- 一旦传输中的适配器检测到有其他适配器正在传输,就停止传输,使用了碰撞检测。
- 尝试重传之前,适配器等待一个随机事件,通常短于一帧的涮书时间。
#
笔者水平有限,只是自己在复习过程中想标记一些点,还有许多协议没有涉及到,尤其是链路层,希望大家自己也去查一查,毕竟我不是搞网络的,希望这篇文章对你们有用,欢迎留言!