重点协议(TCP/UDP/IP等)


前言

本文主要记录TCP/IP五层模型中每层的重点协议,重点是TCP/UDP协议(包括常考的三次握手和四次挥手)。


一、应用层重点协议

1.DNS

DNS(Domain Name System)域名系统,是一套域名映射到IP的系统。其是一个字符串,如:www.baidu.com等。

2.NAT

NAT是解决IP地址不够的一个重要手段,是路由器的一个重要功能。
NAT/IP转换过程:NAT路由器将源地址替换成全局的IP;在路由器收到外部的数据时,又会把目标IP替换回源地址 。NAT路由器内部有一张自动生成的用于地址转换的表。
NAT的缺陷:(1)无法从NAT外部向内部服务器建立连接;(2)转换表的生成和销毁都需要额外开销;(3)NAT一旦出现异常,所有TCP连接也会断开。

3.HTTP/HTTPS

(HTTP和HTTPS是应用层的重点协议,在web开发中进行记录)

二、传输层重点协议

1.TCP

1.TCP格式
在这里插入图片描述
TCP的格式如上图所示,在属性中会穿插讲到。
2.属性
TCP对数据在传输层提供管控机制,只要是安全和效率,为了保证在可靠性的前提下提高传输效率,所以设置一下属性:
(1)确认应答(安全机制):数据传输的过程中,以免对数据进行重复传输,则对每个字节的数据都进行编号,即为序列号,每一个ACK带有对应的确认序列号,告诉给发送者已收到那些数据。
(2)超时重传(安全机制):数据的传输过程中,ACK可能会丢失,接收方会收到许多重复的数据,TCP协议未解决这种问题,前面提到的序列号会有去重的效果;而超时的时间应该怎如何确定?TCP为了保证在任何环境下都能高性能的通信,会动态计算这个最大超时时间,假如第一次超时m,会等待2*m后再重传,以指数形式递增,累积到一定次数后会强制关闭。
(3)连接管理(安全机制)
三次握手建立连接:发送端请求连接,SYN=1,接收端收到请求后同时发送ack=1,syn=1给发送端确认连接,发送端再给接收端发送已经建立连接的确认信号。三次握手也可以是四次但是没必要,浪费时间。
两个重要的状态:
LISTEN:服务器启动之后,绑定端口之后。
ESTABLISHED:连接建立好了之后的稳定状态。
在这里插入图片描述

四次挥手断开连接:发送端给接收端发送FIN表示断开连接后,接收端向发送端回应确定要断开连接吗,发送端再回应确认信号,则断开连接。其中四次挥手,分开主要是由于ACK是操作系统内核收到FIN立即触发的,另一个则是应用程序显示调用Socket的close方法触发的,时机不同。也有可能是三次,中间的两次若是在同一时机,可能会合并。

两个重要的状态:
CLOSE_WAIT:一般使用在接收端,当出现大量close状态说明代码逻辑可能有误,没有及时调用。
TIME_WAIT:发送端收到结束报文段后进入的状态,会等待2MSL时间后进入CLOSED状态。这个状态比较重要,例如:当最后一次ACK丢失的时候,会等待2MSL时间后进入CLOSED状态。
在这里插入图片描述
(4)滑动窗口(效率机制):当我们在发送消息的时候,如果是发一句等待对方回一句,确认对方回应后再发下一句,这样的传输效率太低了,为了在可靠传输的前提下,提高传输效率,滑动窗口能够很好的解决这个问题。窗口的大小就是无序等待确认可以继续发送数据的最大值,设置发送缓冲区记录未确认的数据;窗口越大,网络吞吐率越高。
如果传输过程中ACK丢失,并不要紧,因为可以通过后面的ACK确认。
如果传输过程中数据丢失,发送端会一直收到需要什么数据包ACK的重复提醒,连续三次后就会将对应数据重新发送,然后通过接收缓冲区直接回到上次传输的位置。
(5)流量控制(安全机制):由于接收端处理数据的速度是有限的,如果发送端发的太快,就会导致接收缓冲区太满,再继续接收的话会造成丢包等一些问题,为了控制发送端的发送速度 ,TCP设置流量控制机制支持根据接收端的处理能力进行控制发送端。
(6)拥塞控制(安全机制):滑动窗口可以很好解决传输效率的问题,但是如果一开始滑动的窗口很大就会导致一系列问题,所有为了安全,TCP使用拥塞窗口,刚开始发送很少的数据,探测网络是否通畅,再指数形式增加到一个阈值后按照线性增长的方式增长。
在这里插入图片描述

(7)延迟应答(效率机制):接收数据的主机如果立刻返回ACK应答,这时的窗口可能较小,为了在网络不拥塞的情况下提高传输效率,让它延迟回应,达到最大延迟时间后就应到一次。
(8)捎带应答(效率机制):接收端和发送端大多是一发一收的情况,ACK在接收端给发送方回应的时候可以顺带一起回应。
(9)面向字节流(黏包问题):应用层收到的数据包,在传输层是由序列号排序,但是应用层是一连串的字节数据,并不知道从哪开始从哪结束,为了避免这种情况,需要明确两个包之间的边界,可以通过设置标志符,数据长度等方式进行改进。
(10)异常情况
a.程序奔溃:进程异常退出,操作系统会回收进程的资源,和普通的四次挥手差不多。
b.正常关机:系统内核会进行文件描述符的释放操作,进行四次挥手。
c.机器断电:如果是接收方掉电,发送方会继续发送数据,但是没有ACK了,重传几次,仍然无应答,会尝试重置连接,也会失败,就会放弃连接。如果掉电的是发送方,接收方等一会之后会发送一个“心跳包”,是一个不携带任何数据的包,如果对方不回应,此时会放弃连接。
d.网线断开:同机器掉电一样。
这里主要记录TCP的是个属性,但TCP远不止这十个属性

2.UDP

1.格式
在这里插入图片描述
UDP无需建立连接,只需要目的端IP和端口号就可以进行传输,它是一个面向数据报的不可靠传输。

3.TCP/UDP对比

TCP UDP
有连接 无连接
可靠 不可靠
面向字节流 面向数据报
接收和发送缓冲区都有 只有接收缓冲区

面试题1

如何基于传输层UDP协议,实现一个可靠传输?
可以参考TCP的可靠机制在应用层实现的逻辑:(1)引入序列号,保证数据顺序;(2)引入确认应答,确保对端收到了数据;(3)引入超时重传,如果隔一段时间没有应答就重发数据等等。

三、网络层重点协议

1.IP

协议头部格式如下:
在这里插入图片描述
4位版本号,如IPv4、IPv6;8位服务类型,主要用到的右四位分别表示:最小延迟、最大吞吐量、最高可靠性、最小成本,只能四选一。
8位生存时间TTL是数据报到达目的地的最大报文跳数,一般是64,经过一个路由减1,一直减到0还没到达,则丢弃。
8位协议表示上层协议的类型。16位首部校验和使用CRC来校验头部手否损坏。
(1)地址管理
IP地址由网络号和主机号组成。
网络号:标识网段,保证相互连接的两个网段有不同的表示。
主机号:标识主机,同一网段内,主机之间具有相同的网络号,但是必须有不同主机号。
子网掩码:用来划分从哪到哪是网络号,其特征是左半部分为全1,右半部分为全0;例如:255.255.255.0表示主机号有24位。A、B、C、D、E类不做过多的说明。
广播IP:主机号全为1.
IP地址分为两大类:外网IP/公网IP、内网IP/私网IP/局域网IP;(约定10.、172.16~172.31.,192.168.* 为局域网IP)
本地环回地址:127.0.0.1
本机IP地址:192.168.xxx.xxx

(2)路由选择
类似于“问路”,从一点到另一点,一路走一路问,直到转到终点,路由器中有一个路由表数据结构,如果目前IP路由器认识,会给出一个明确的路线,如果路由器不认识,路由器会把数据报发给一个更广的路由器(路由表中的默认选项下一跳),如果最终没有找到,TTL会耗尽就结束了。

四、数据链路层重点协议

1.以太网

(1)以太网帧格式如下:
在这里插入图片描述
其中的目的地址和源地址是mac地址(物理地址),用6个字节表示,主要是在数据链路层实现相邻结点之间的转发,mac地址可以作为是主机身份标识的一种方式。
数据的1500是以太网数据帧的最大值。
帧协议类型字段有三种值:IP、ARP、RARP。
CRC校验和是交给硬件(网卡)计算的,UDP的校验和是通过软件计算的。
(2)MTU
MTU是限制不同数据链路对应的物理层,以太网的数据长度最大为1500字节;如果数据包从以太网路由到链路上长度过长,则需要对数据包进行分片,不同的数据链路层标准的MTU是不同的。
(3)ARP
ARP协议建立了主机IP地址和MAC地址的映射关系。RARP则是相反的关系。


面试题2

从浏览器输入一个URL,到最终展示出页面,大概会发生什么?

(1)进行DNS域名解析:将域名自动转换成IP地址;
(2)进行封装:浏览器构造出HTTP数据报;交给传输层TCP(先建立连接三次握手),然后在发送刚才的HTTP请求,数据交给网络层,IP协议封装成IP数据报,IP数据报再交给数据链路层,封装成对应的数据帧,最终通过网卡传输出去;
(3)进行传输:中间会经历一些交换机和路由器,交换机会把数据分用到数据链路层(更上层的不再解析),再重新封装,继续转发;路由器会把数据分用到网络层(更上层的不再解析),重新封装,继续转发;路由表匹配过程就是路由器根据数据报中的目的IP在路由表中匹配,找个合适的方向发出去(每次转发TTL-1);
(4)到达目标服务器之后:服务器进行层层分用,一直到HTTP这一层;服务器会找到想访问的那个资源,把资源再进行构造成HTTP响应(根据请求计算响应);
(5)服务器把响应重新封装;
(6)响应数据在中间进行转发,回到浏览器;
(7)客户端在针对数据解析;
(8)解析出一个网页,渲染到浏览器上。

猜你喜欢

转载自blog.csdn.net/qq_45283185/article/details/127403017