-
OSI七层模型
-
应用层
-
表示层
-
会话层
-
传输层
-
网络层
-
数据链路层
-
物理层
-
-
TCP/IP五层协议栈
-
物理层
-
数据链路层
-
网络层
-
传输层
UDP:无连接,不可靠,面向数据报
TCP:有连接,可靠,面向字节流
-
应用层
-
-
传输层数据一般叫做数据段
-
网络层数据一般叫做数据报
-
数据链路层数据一般叫做数据帧
传输层
UDP
-
协议段格式:
-
组成:2字节源端口,2字节目的端口,2字节数据报长度,2字节校验和
-
优点:传输速度快,支持“广播”
-
缺点:无重传机制,当传输过程发生错误时无法得知传输成功与否;
长度64kb,不适合传输大文件
TCP
确认应答机制+超时重传(可靠性)
-
协议段格式:
-
确认应答机制:发送数据后,接收方返回报文包含确认序号ACK,ACK确保了ACK之前的数据接收成功,发送方接下来发送的序号从ACK开始。
-
超时重传:发送数据后等待一段时间,若没有接收ACK则会重传,可能存在发送方丢包以及ACK丢包问题,若ACK丢包则会发送两次数据,这时就需要去重机制,接收方有缓冲池,根据发送数据的序号判断是否去重。等待时间是不确定的且逐渐增大的,当等待一定时间后就会认为网络等问题,断开连接。
连接管理
-
TCP建立连接,3次握手
-
本质:确认通信双方的发送能力和接受能力正常
-
SYN:同步报文段
-
-
-
TCP断开连接,4次挥手
-
FIN:结束报文段
-
-
接收方返回ACK与FIN时不一定合并:
-
不合并的理由:发送ACK是操作系统内核的行为。在收到FIN时发送ACK。发送FIN是应用程序的行为,在执行代码中的“close()”才会发送FIN。
-
合并的理由:如果close()能够很快地被调用,即ACK和FIN间隔较短时会触发TCP的“延时应答+捎带应答”机制。
-
-
TCP常见的“状态”
-
ESTABLISHED :连接成功,可以进行后续通信。
-
LISTIN:服务器端的状态:允许客户端随时建立连接。
-
CLOSE_WAIT:断开连接时服务器端的一个中间状态。存在于接收FIN,发送ACK,发送FIN的时间点。
-
TIME_WAIT:断开连接时主动发起的客户端的一个状态,防止最后一个ACK丢包。发送ACK后等待一段时间,若服务器端发送FIN则ACK丢包,继续发送ACK。TIME_WAIT=2MSL,MSL为端与端传输数据的最大时间间隔。
滑动窗口
-
在确保TCP可靠性的同时,也要保证高效率
-
窗口范围内的数据即发送的的数据也是等待ACK响应的数据,当返回一个ACK时表示,等待响应的数据也会改变,同时发送新的数据。
-
若ACK响应丢包,可以通过后续到达的ACK响应来确认,如:ACK=1001丢包,则第二个ACK=2001到达时则可以确认1-2000数据发送成功。
-
若数据包丢包,则服务器端后续发送给客户端的数据报中ACK 为成功传输数据包的ACK,如1-1000成功发送,1001-2000丢包则接收2001-3000的数据包返回的依然是ACK=1001,多次返回1001后,客户端重新发送1001-2000数据包。以此类推。
流量控制
-
目的:为了使发送的速率和接收方的速率可能一致,提高数据传输的效率
-
方法:发送方发送数据后,接收方返回一个ACK以及一个“缓冲区空余空间”。根据这个大小来决定窗口的大小。若无空余空间,则每隔一段时间发送方发送试探报文来获取一个ACK和缓冲区空余空间。
-
缓冲区空余空间存储在TCP报头的16位窗口大小的字段中来确定窗口大小。
拥塞控制
发送方发送的初始窗口为一个较小的窗口,若无丢包行为则逐渐增大,若丢包则减小窗口大小,循环此过程。
先指数增加,到达阈值后线性增加。网络堵塞后,窗口大小重新定为慢开始的大小,阈值为堵塞窗口大小的一般。
延迟应答
-
接收方收到数据后等待一段时间,可能有更多的缓冲区空余空间,提高传输效率。
-
每隔几个包延迟一次或者每隔一段时间延迟一次。
捎带应答
-
基础:延迟应答
-
作用:减少了传输数据包的个数,降低传输成本,提高传输效率
面向字节流
-
应用程序可以以字节为单位发送/接收数据。
-
核心在于TCP的“缓冲区”。
-
粘包问题:接收方以字节为单位读取数据后存放进接受缓冲区,与此同时,接受了多条数据,无法区分字节属于哪个数据。
显式的指定包的长度;显式的指定包的分隔符。必须具备一种或两种。
TCP异常处理
-
RST:复位报文段
-
进程终止:会释放文件的描述符,仍可以发送FIN。
-
机器重启:正常重启的情况下和进程终止一样
-
断电断网:
接受方断电断网时,发送方没有收到ACK确认会触发超时重传,达到一定次数是就会重置连接。若重置连接没有响应就会释放连接。
发送方断电断网时,TCP内置一个“保活机制”,接收方每隔一段时间会发送一个短小的数据,期待回应,多次尝试后就会重置连接。若重置连接没有响应就会释放连接。
网络层
IP协议
协议头格式
-
版本:常用IPV4,IPV6
-
4位首部长度能表示4*15
-
TOS:切换IP协议模式,只有四位能用,分别表示:最小延时,最大吞吐量,最高可靠性,最小成本,其中四者是相互冲突的。
-
16位总长度:不同于UDP只支持64kb,IP协议支持拆包和组包.
-
16位标识:当一个IP数据报触发分包机制,分成多个包时,拥有同一个标识。
-
3位标志:识别这个包是不是最后一个包。
-
13位片偏移:区分出若干个包,谁在前,谁在后。
-
8位生存时间:有一个初始生存时间,每经过一个设备转发就会-1,到0时就认为不会到达目的端,将其丢弃。
-
8位协议:明确指出是传输层的哪个协议。
-
16位首部检验和:验证首部是否正确。
-
32位源IP地址:发送方地址
-
32位目的IP地址:接收方地址
网段划分
-
IP地址分为两部分:
网络号:局域网标识
主机号:区分同一局域网的不同主机。
-
划分IP地址:
-
传统网络划分:
-
通过子网掩码来划分:子网掩码与IP地址相与操作得到网络号,甚于位为主机号。
-
特殊的IP地址:
-
主机地址全为0,成为网络号,代表该局域网
-
主机地址全为1,成为广播地址,将信息传输给该局域网。
-
127.*用于本机环回测试。
IPV4地址枯竭
-
动态划分IP地址:当一台设备关闭时回收IP地址,请求时在重新分配。
-
NAT机制:将源IP地址替换,使用一个外网IP替代多个内网IP,多个内网IP通过端口号来进行区分。
-
IPV6:IPV4的升级版,保证地址绝对够用,但与IPV4不兼容。
路由选择
-
通过路由表查询IP地址,若查询到则直接从指定网络接口进行发送。如果没有查询到则会从默认接口发送,一般为WAN口,即上一级路由器。
数据链路层
-
只关注相邻节点之间的传输情况。
以太网(协议)
-
既包含了数据链路层,也包含了物理层
-
以太网的网线必须使用双绞线
-
此处地址为MAC地址
-
类型
-
0800:普通数据帧
-
0806:ARP
-
8035:RARP
-
-
数据部分为一个完整的IP数据报,数据长度存在最大值
-
CRC:校验和,验证数据是否正确。
MAC地址
-
即物理地址,和主机的网卡绑定,唯一的,不能修改的。
-
IP地址立足于全局,用于网络规划
-
MAC地址立足于局域网,专注于相邻节点的通信
-
将IP数据报加入帧头和帧尾形成以太网数据帧
ARP协议
-
建立IP地址与MAC地址之间的映射关系。
-
ARP每隔一段时间就会对当前局域网进行广播,把ARP请求发送到局域网内每个设备,设备会发送一个ARP响应,其中包括设备的IP地址和MAC地址,路由器会对其进行一一对应并存储。
DNS应用层协议
-
域名解析系统
-
查询网页时,IP地址难以记忆,用域名来进行查询方便很多。DNS将域名转换为IP地址。
-
用户通过域名查询网站时都要访问DNS服务器,此时服务器承担很大的压力,一般有两种处理方法
-
缓存
访问过后存储到主机
-
分布式
每个主机访问DNS时,就近访问DNS服务器
根据域名来分级查询,使每个根域名服务器不必装载过多的域名
-
浏览器中输入url后发生的事情
-
后端的角度
-
网络传输过程(DNS域名解析,HTTP协议格式,TCP建立连接和传输,IP数据报的转发过程,数据链路层转发过程)
-
应用程序(Tomcat根据请求获取Servlet代码),执行代码,根据代码构建响应,将响应返回给客户端
-
服务器整体系统流程(分布式架构的基本面)
-
-
前段的角度
-
网络传输过程(DNS域名解析,HTTP协议格式,TCP建立连接和传输,IP数据报的转发过程,数据链路层转发过程)
-
浏览器如何处理用户的操作(浏览器如何获取输入的字符串,如何构建一个HTTP,如何发送出去)
-
浏览器如何处理服务器的相应数据(如浏览器如何将HTML渲染成页面效果)
-