1.TCP/IP协议模型(Transmission Control Protocol/Internet Protocol),包含了一系
列构成互联网基础的网络协议,是Internet的核心协议,基于TCP/IP的参考模型将协议分成四个层次,它们分别是链路层、网络层、传输层 和应用层。下图表示TCP/IP模型与OSI模型各层的对照关系
其中在
应用层主要包括Http和https协议等
传输层是TCP和UDP 协议
网络层是IP协议
数据链路层是将0,1序列划分为数据帧,从一个节点传输到另一个节点,这些节点通过Mac地址来唯一标识
数据传输的过程:其实可以理解为数据的出栈和入栈,应用层生成HTTP的数据,经过传输层是为其添加TCP的首部,之后经过网络层为其添加IP地址和其他的数据,经过数据链路层是为其添加以太网协议头,之后到达接收方时一步步拆除首部和尾部,最终得到传输的数据
截屏2020-09-05 下午4.54.14.png
数据链路层
物理层负责0、1比特流与物理设备电压高低,而数据链路层就是将0,1序列划分为数据帧,从一个节点传输到另外一个节点,这些节点通过Mac地址来表示,其中帧的头部包涵源MAC(网卡制造商给的)地址与目的地址
IP地址层
在数据链路层通过MAC来识别不同的节点,而在IP层我们通过IP地址来识别地址,
IP 与Mac的区别可以理解为:IP是用于网络到网络,MAC用于设备到设备
IP协议:里面有一个8位的TTL字段,这个字段规定该数据包在经过多少个路由后才会被抛弃,
ARP:是根据IP地址获取MAC地址的一种协议。
ICMP协议:IP协议并不是一个可靠的协议,它不保证数据被送达,那么,自然的,保证数据送 达的工作应该由其他的模块来完成。其中一个重要的模块就是ICMP(网络控制报文) 协议。ICMP不是高层协议,而是IP层的协议。
ping:ping可以说是ICMP的最著名的应用,是TCP/IP协议的一部分。利用“ping”命令可以
检查网络是否连通,可以很好地帮助我们分析和判定网络故障。
Traceroute:是用来侦测主机到目的主机之间所经路由情况的重要工具,当收到目的主机的IP后,首先给目的主机发送一个TTL为1的数据包,之后经过第一个路由器后把TTL减一,次数路由器就会将包抛到,并返回一个主机不可达的ICMP数据包给主机,之后主机再发送TTL为2的数据包为目的主机,以此反复最后的到所有路由的ip地址
TCP/UDP
截屏2020-09-05 下午5.21.18.pngDNS:就是将域名转换为IP地址的分布式数据库,
TCP连接的建立与终止
截屏2020-09-05 下午5.24.34.png截屏2020-09-05 下午5.45.55.png
为什么是三次握手:
为了防止已经失效的报文段有传到了服务端,从而产生错误
具体例子:客户端发送一个建立网络连接的请求,请求在网络中长时间滞留,由于客户端重新发送一条请求,通过两次握手完成连接,传输数据,关闭连接,之后网络滞留的连接请求到达服务端后,经过两次握手再次建立连接,但是这是客户端并没有发出建立连接的请求,因此并不会向服务端传输数据,造成了服务端资源的浪费
四次挥手断开连接
截屏2020-09-05 下午5.58.41.png截屏2020-09-05 下午5.59.09.png
为什么要四次分手
因为TCP是全双工模式,也就以为这当主动发发送fin给被动方时,只能表示主动方已经没有数据要发生了,当被动方返回ACK表示我知道你已经没有数据可发送了,当被动方发送FIN报文字段时,表示被动方也没有数据要发送了,请求,之后主动方会放回ACK表示我同意你关闭,被动方关闭连接,主动方等2MSL后关闭连接
为什么等待2MSL
1.因为TCP为全双工连接:如果主动方直接关闭的话,由于网络不稳定导致被动方没有接受到ACK,超时候再次发送Fin,这时主动方就找不到重发的Fin对应的连接了
2.保证重复数据段从网络中消失:有可能有某些数据滞留在网络中,这些延迟数据在第二次连接建立之后才到达,TCP就会认为那个延迟数据是属于新的连接的,就造成了新连接的数据包发生混淆。
TCP的流量控制
出现流量控制的原因:如果发送方发送数据过快,就会导致接收方来不及接收,造成了数据的丢失,所谓的流量控制就是让发送方的发送速率不要太快,利用滑动窗口实现
当A向B建立连接发送数据的时候,B会告诉A他的接受窗口是多少(字节),发送方的发送窗口不能超过给出接受窗口的值,当最后调整为0时,TCP的发送方就会启动一个持续计时器,若超过了这个时间,发送方就会发送一个零窗口的控测报文段给接受方,如果可以发送数据就开发发送数据,不能就重新设置持续计时器
拥塞控制
1.慢开始和拥塞避免
发送方维持一个拥塞窗口 cwnd ( congestion window )的状态变量。拥塞窗口的大 小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞 窗口。
慢开始算法:
通常在刚刚开始发送报文段时,先把拥塞窗口 cwnd 设置为一个最大报文段 MSS(Maximum Segment Size,最大报文长度)的数值。而在每收到一个对新的 报文段的确认后,把拥塞窗口增加至多一个MSS的数值(底数为2的指数增长规 律)
为了防止拥塞窗口cwnd增长过大引起网络拥塞,还需要设置一个慢开始门限 ssthresh状态变量。慢开始门限ssthresh的用法如下:
当 cwnd < ssthresh 时,使用上述的慢开始算法。
当 cwnd > ssthresh 时,停止使用慢开始算法而改用拥塞避免算法。
当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞控制避免算法。
拥塞避免算法:
让拥塞窗口cwnd缓慢地增大,即每经过一个往返时间RTT就把发送方的拥塞窗口 cwnd加1,而不是加倍。这样拥塞窗口cwnd按线性增长规律缓慢增长,比慢开始 算法的拥塞窗口增长速率缓慢得多。
无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就 是没有收到确认),就要把慢开始门限ssthresh设置为出现拥塞时的发送 方窗口值 的一半(但不能小于2)。然后把拥塞窗口cwnd重新设置为1,执行慢开始算法。
2.快重传和快恢复
快重传规定:发送方只要一连收到三个重复确认就应当立即重传对方尚未收 到的报文段M3,而不必 继续等待M3设置的重传计时器到期。
快恢复:当发送方连续收到三个重复确认,就执行“乘法减小”算法,把慢开始门限 ssthresh减半。
与慢开始不同之处是现在不执行慢开始算法(即拥塞窗口cwnd现在不设置为 1),而是把cwnd值设置为 慢开始门限ssthresh减半后的数值,然后开始执行 拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。
网友评论