网络通信
网络通信
计算机网络发展概史
计算机的发展大致分为以下四个阶段
1、诞生阶段,单个计算机为中心的远程联机系统
2、ARPANET,多个主机通过通信线路互联起来
3、开放性的标准化体系结构,OSI诞生
4、Internet互联网
OSI模型分为7层,tcp/ip模型分为4层,并存在对应关系
osi:物理层、链路层、 网络层、 传输层、 会话层、表示层、应用层
tcp/ip:链路层、 网络层、 传输层、 应用层
ip -> 网络层 tcp|udp -> 传输层 http | https -> 应用层
像我们日常中所说的4G、5G网络,是作用在链路层
TCP协议的基本特性:
面向链接、可靠性、RTT和RTO、数据排序、流量控制、全双工
数据流通
在构造一个请求包时,从上往下,依次添加各个层级信息
在解析一个请求包时,从下往上,依次解析出各个层级的信息
Tcp协议
- 优势:
面向连接
可靠性
RTT和RTO
数据排序
流量控制
全双工
tcp协议位于传输层
三次握手
TCP协议中,Client与Server端建立链接会经历三次握手过程
1、Client 向 Server端发送报文,
含有SYN = 1; seq(序列号)=1234(系统决定,1234是举例),Client端进入SYN_SENT状态
2、Server 接收到 Client端报文,向Client端发送一个确认报文,
含有 SYN = 1;ACK = 1; ack=1235(1234 + 1);seq(序列号)=2637(系统决定,2637是举例)
Server端进入SYN_SYN_RCND状态
3、Client端接收到Server的确认报文,向Server端也发送一次确认报文,
含有 ACK = 1;ack=2638(2637+1);
Client与Server端都进入ESTABLISHED状态,通信建立,开始会话
以上就是三次握手的过程
问题:
为何tcp协议需要三次握手,而不是两次
因为三次是保证连接可靠、效率最高的次数。
第一次:客户端询问服务端能否建立通信
第二次:服务端向客户端确认可以通信
第三次:客户端向服务端确认可以通信
然后建立通信。
洪泛攻击
黑客伪造大量虚假ip向服务端发送第一次握手报文,使server端大量通信进入SYN_SYN_RCND状态,消耗server资源,
使服务端无法响应其他的请求,甚至宕机。
处理方案:防火墙、
四次挥手
当要断开连接时,客户端与服务端之间将进行四次挥手,来确保数据传输都完毕,确保连接断开。
1、client向server端发送FIN报文,
含有FIN = 1,seq(序列号)=J(系统决定,J是举例),Client进入FIN_WAITING
2、server收到客户端发送的报文,同时向Server发送一个FIN ACK 确认报文
含有ACK = 1; ack = J + 1; Server进入CLOSE_WAITING
3、server向client发送一个FIN报文,
含有FIN = 1; seq = K;Server进入 CLOSE状态
4、client收到上述两个server端报文,Client进入TIME_WAITING状态,同时client向server发送一个ACK报文,
含有FIN = 1; ACK = 1; ack = K + 1;
server接收到此报文后,进入CLOSED状态,
而client,在经过2 * MSL的时间段后,client进入CLOSED状态。
注意:四次挥手设计到四次报文的传输,但在实际中,可能会存在报文合并的现象,就是报文发送的次数可能只有3次甚至两次。
MSL理论上是2分钟,可实际一般会被重写为30s,所以最后等待时间为1min-4min。
为什么需要四次挥手
因为tcp是全双工(即客户端和服务器端可以相互发送和接收请求),所以需要双方都确认关闭连接。
为什么需要TIME-WAIT状态?
在第三次报文发送,client接收到时,client会进入TIME_WAIT状态,而且是需要经过经过2 * MSL,才会进入CLOSED状态,
为何这么设计呢,因为要考虑最后一个报文的接收,要考虑到Server未接收到时,需要重新发送,还要考虑,如果Client即时进入CLOSED,连接断开,端口可能会有一个新的程序使用,可能存在报文被发送到这个新启动的程序。
wireshark
使用wireshark可以抓包,查看到连接过程中的每一次数据包的传递
使用过滤器查看
tcp udp 可以指定协议
tcp.port==80 端口
ip.src==192.168.101.130 ip
连接符使用and
tcp and tcp.port==3306 and ip.src==192.168.101.130
Http
Http(Hyper Text Transfer Protocol)超文本传输协议
服务器传输超文本到本地浏览器的传送协议
一次完整的Http请求过程
1、首先进行DNS域名解析(本地缓存、操作系统缓存或DNS服务器)
2、三次握手建立TCP连接
3、客户端发起Http请求
4、服务端响应Http请求
5、客户端解析http代码,并请求http代码中的资源
6、客户端渲染展示内容
7、四次挥手关闭tcp连接
questtion
1、DNS 劫持
2、http劫持
UDP 协议
UDP是非面向连接的,所以优点是快,缺点就是不安全、可能数据丢失
要构造一个UDP请求时,需要使用DatagramSocket