应用层交互过程举例
DNS
DNS为域名系统,用于将IP与域名进行关联。区分互联网上的某一台主机使用的是IP,但是因为IP不是便于人类记忆的东西,而域名便于我们人类记忆,所以需要DNS讲IP和域名进行关联。
下面用查询www.test.com的过程,说明下DNS的主要工作过程:
1、本地PC要访问www.test.com,首先会查询下本地PC是否有缓存,如果没有缓存,将向自己配置的首选DNS服务器询问是否知道www.test.com的IP
2、首选DNS服务器如果不知道,将会向根域服务器询问是否知道com DNS服务器的IP
3、首选DNS服务器从根域DNS服务器拿到com DNS服务器的IP后,向com DNS服务器发起询问是否知道test.com DNS服务器
4、首选DNS服务器从com DNS服务器拿到test.com服务器的IP后,继续向test.com服务器发起询问是否知道www.test.com的服务器IP
5、首选DNS服务器从test.com域名服务器拿到www.test.com的服务器IP后,将www.test.com的服务器IP返回给本地PC
6、本地PC从首选DNS服务器上拿到www.test.com的IP后,向www.test.com的WEB服务器发起访问,整个DNS过程结束
HTTP
一次完整的HTTP请求响应交互的过程一般分为如下4个步骤:
1、客户端和服务器端建立连接
2、客户端发送请求数据到服务器端(HTTP 协议)
3、服务器端接收到请求后,进行处理,然后将处理结果响应客户端(HTTP 协议)
4、关闭客户端和服务器端的连接(HTTP1.1 后不会立即关闭)
HTTPS
因为HTTP的交互过程请求和响应均为明文的,容易被窃听、篡改、劫持,所以人们想到了在HTTP数据上使用TLS加密后再传递给TCP层进行封装。
其交互过程如下:
1、客户端发送clienthello包,该包包含客户端支持的TLS版本、随机数(client random)(用于后续生成对话的密钥)以及自己支持的加密算法
2、服务端接收到clienthello包后,发送serverhello包,该包包含选择的TLS版本,随机数(server random)(用于后续生产的对话密钥)、选择的加密算法、自己的服务器证书
3、客户端收到serverhello包后,首选校验服务器证书的有效性,并利用client random和server random以及协商好的算法生成构造密钥的字符串,并使用服务端的公钥加密发送给服务端,此时客户端已经有了密钥=(client random+server random+构造密钥的字符串+协商好的算法)
4、服务端接收到后,用自己的私钥解密得到构造密钥的字符串,此刻服务端也有了密钥=(client random+server random+构造密钥的字符串+协商好的算法),之后双方发生信息的加解密过程就可以用密钥进行加密了
websocket
WebSocket协议和HTTP协议一样,也是在TCP协议层之上的应用层协议,刚接触WebSocket协议的人通常会有个疑问:都有HTTP这个应用层协议了,为啥还要再搞出一个WebSocket协议?
事实上,HTTP是无状态的,并且只能支持单向通信,即都是浏览器向服务端发送HTTP请求,然后得到一个响应。而websocket支持双向通信,即服务端能向客户端主动发送信息。
其交互过程如下:
客户端请求报文
与传统 HTTP 报文不同的地方:
这两行表示发起的是 WebSocket 协议。
Sec-WebSocket-Key 是由浏览器随机生成的,提供基本的防护,防止恶意或者无意的连接。
Sec-WebSocket-Version 表示 WebSocket 的版本,最初 WebSocket 协议太多,不同厂商都有自己的协议版本,不过现在已经定下来了。如果服务端不支持该版本,需要返回一个 Sec-WebSocket-Versionheader,里面包含服务端支持的版本号。
然后我们来看看服务端的响应报文:
我们一行行来解释:
首先,101 状态码表示服务器已经理解了客户端的请求,并将通过 Upgrade 消息头通知客户端采用不同的协议来完成这个请求;
然后, Sec-WebSocket-Accept 这个则是经过服务器确认,并且加密过后的 Sec-WebSocket-Key;
最后, Sec-WebSocket-Protocol 则是表示最终使用的协议。
Sec-WebSocket-Accept 的计算方法:
将 Sec-WebSocket-Key 跟 258EAFA5-E914-47DA-95CA-C5AB0DC85B11 拼接;
通过 SHA1 计算出摘要,并转成 base64 字符串。
注意: Sec-WebSocket-Key/ Sec-WebSocket-Accept 的换算,只能带来基本的保障,但连接是否安全、数据是否安全、客户端 / 服务端是否合法的 ws 客户端、ws 服务端,其实并没有实际性的保证。
应用层与传输层的接口socket
socket工作过程
传输层–提供进程到进程的通信
传输层协议–TCP、UDP
TCP的作用:该协议主要用于在主机间建立一个虚拟连接,以实现高可靠性的数据包交换。IP协议可以进行IP数据包的分割和组装,但是通过IP协议并不能清楚地了解到数据包是否顺利地发送给目标计算机。而使用TCP协议就不同了,在该协议传输模式中在将数据包成功发送给目标计算机后,TCP会要求发送一个确认;如果在某个时限内没有收到确认,那么TCP将重新发送数据包。另外,在传输的过程中,如果接收到无序、丢失以及被破坏的数据包,TCP还可以负责恢复。
UDP的作用:UDP协议与TCP协议一样用于处理数据包,在OSI模型中,两者都位于传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。但也因为没有TCP确认、重传等机制的开销,所以在网络上传输效率会更高。
常见服务端口:
补充:保护消息边界,就是指传输协议把数据当作一条独立的消息在网上 传输,接收端只能接收独立的消息。也就是说(UDP)存在保护消息边界,接收 端一次只能接收发送端发出的一个数据包;而面向流(TCP)则是指无保护消息保护边界的,如果发送端连续发送数据,接收端有可能在一次接收动作中,会接收两个或者更多的数据包。
TCP/UDP端口
TCP、UDP端口有什么用呢? 我们知道,一台拥有IP地址的主机可以提供许多服务,比如Web服务、FTP服务、SMTP服务等,这些服务完全可以通过1个IP地址来实现。 那么,主机是怎样区分不同的网络服务呢?显然不能只靠IP地址,因为IP 地址与网络服务的关系是一对多的关系。 实际上是通过“IP地址+端口号”(套接字)来区分不同的服务的。
通信双方TCP交互过程
TCP确认机制
TCP为传输的每个字节分配了一个序号Sequence Number ,并期望从接收端的TCP得到一个肯定的确认(ACK)。因为数据按块(TCP报文段)的形式传输,所有TCP报文段中的每一个数据字节的序列号被发送到目的主机。当报文无序到达时,接收端TCP使用序列号来重排TCP报文段,并删除重复发送的报文段。 TCP的确认是对接收到的数据的最高序号的确认,并向发送端返回一个下次期望收到的第一个数据字节的序号。
TCP重传机制
TCP流控机制—滑动窗口
TCP头里有一个字段叫Window,又叫Advertised-Window,这个字段是接收端告诉发送端自己还有多少缓冲区可以接收数据。于是发送端就可以根据这个接收端的处理能力来发送数据,而不会导致接收端处理不过来。
TCP拥塞控制
TCP不是一个自私的协议,当拥塞发生的时候,要做自我牺牲。就像交通阻塞一样,每个车都应该把路让出来,而不要再去抢路了。关于拥塞控制的论文请参看《Congestion Avoidance and Control》(PDF) 。拥塞控制主要是四个算法:1)慢启动,2)拥塞避免,3)拥塞发生(快重传),4)快速恢复。
TCP标志位
不同的标志位(或组合)代表不同的tcp数据包类型,如syn包、syn/ack包、ack包、ack/psh包、rst包、fin包等。 主机接受到不同的tcp包进入不同的tcp状态,并响应不同的tcp包。
TCP连接状态(状态机)
网络上的传输是没有连接的,包括TCP也是一样的。而TCP所谓的“连接”,其实只不过是在通讯的双方维护一个“连接状态”,让它看上去好像有连接一样。
HTTP协议的整个数据包交互过程:
网络层–提供主机到主机的通信
网络层–IP地址
网络层–IP地址分类
网络层–IP地址子网划分
主机地址和掩码地址进行二进制与运算,得到网络号。 通信双方是否在同一网段就看网络号是否一样。
网络层–路由
网络层–路由表(选路的依据)
如下是windows上的路由表:
网络层–路由匹配
网络层–数据包发送/接收过程
网络层–防火墙
netfilter在网络层注册了5个钩子函数(上图红色部分) 用于对报文进行跟踪记录、过滤、修改、NAT等操作
网络层—防火墙框架
网络层–防火墙完整处理过程
网络层–防火墙命令格式
物理层与数据链路层–提供结点到结点的通信
物理层与数据链路层–网卡及网卡驱动
ARP与RARP协议
在一个稳定的网络中,IP地址和MAC地址是成对出现的。如果一台计算机要和网络中另一外计算机通信,那么要配置这两台计算机的IP地址,MAC地址是网卡出厂时设定的,这样配置的IP地址就和MAC地址形成了一种对应关系。在数据通信时,IP地址负责表示计算机的网络层地址,网络层设备(如路由器)根据IP地址来进行操作;MAC地址负责表示计算机的数据链路层地址,数据链路层设备(如交换机)根据MAC地址来进行操作。IP和MAC地址这种映射关系由ARP(Address Resolution Protocol,地址解析协议)协议完成。
为什么要同时具备IP和MAC地址?
信息传递时候,需要知道的其实是两个地址:终点地址(Final destination address)、下一跳的地址(Next hop address) IP地址本质上是终点地址,它在跳过路由器(hop)的时候不会改变,而MAC地址则是下一跳的地址,每跳过一次路由器都会改变。这就是为什么还要用MAC地址的原因之一,它起到了记录下一跳的信息的作用。分层实现如果在IP包头(header)中增加了”下一跳IP地址“这个字段,在逻辑上来说,如果IP地址够用,交换机也支持根据IP地址转发(现在的二层交换机不支持这样做),其实MAC地址并不是必要的。但用MAC地址和IP地址两个地址,用于分别表示物理地址和逻辑地址是有好处的。这样分层可以使网络层与链路层的协议更灵活地使用,网络层不一定非要用IP协议,链路层也不一定非用以太网协议。 另外,如果只有MAC,没有IP,则需要向全世界发送arp广播包以获取目的mac,网络带宽瞬间会饱和。
物理层实现–传输光、电、无线信号
来源:freebuf.com 2021-05-13 23:57:10 by: chenhh
请登录后发表评论
注册