《图解HTTP》
《图解TCP/IP》
《计算机网络:自顶向下方法》
慕课网
慕课网html
获取本机IP地址,DNS服务器地址,网关路由器地址程序员
获取域名的IP地址算法
创建链接,通讯,断开链接json
TCP 为啥须要三次握手,四次挥手浏览器
SYN/ACK 报文
先到达服务端(第一次握手),服务端处理后返回一个 SYN/ACK报文
(第二次握手),客户端根据自身上下文判断出这是一个历史链接(序列号或链接超时),会发送一个RST报文表示终止这一次链接(第三次握手)去重
,双方数据包有序
抓包分析三次握手和四次挥手缓存
名词 | 解释 |
---|---|
[S] |
SYN |
[.] |
ACK |
[P] |
Package,数据包 |
[F] |
FIN |
为啥 time_wait 须要等待 2MSL?服务器
服务端会从新发送 FIN 标记报文请求断开与客户端链接(1MSL),客户端收到后会从新发送一个 ACK 报文
,保证TCP协议的全双工链接可以可靠关闭为啥会出现大量的 close_wait ?网络
TCP 为啥须要流量控制并发
TCP 是全双工的,客户端和服务器都可做为发送方或接收方,咱们如今假设一个发送方向接收方发送数据的场景来说解流量控制。首先咱们的接收方有一块接收缓存,当数据来到时会先把数据放到缓存中,上层应用等缓存中有数据时就会到缓存中取数据。假如发送方没有限制地不断地向接收方发送数据,接收方的应用程序又没有及时把接收缓存中的数据读走,就会出现缓存溢出,数据丢失的现象,为了解决这个问题,引入流量控制窗口socket
缓冲区剩余大小称之为接收窗口,用 rwnd 表示,若是 rwnd=0,则发送方中止发送
。只要接收方在响应 ACK 的时候把这个窗口的值带给发送方,发送方就能知道接收方的接收缓存还有多大的空间,进而设置滑动窗口的大小。
TCP 为啥须要拥塞控制
拥塞控制是指发送方先设置一个小的窗口值做为发送速率,当成功发包并接收到ACK时,便以指数速率增大发送窗口的大小,直到遇到丢包(超时/三个冗余ACK),才中止并调整窗口的大小。这么作能最大限度地利用带宽,又不至于让网络环境变得太过拥挤。
拥塞控制 是调解网络的负载
接收方网络资源繁忙,因未及时响应ACK致使发送方重传大量数据,这样将会致使网络更加拥堵
拥塞控制是动态调整 win 大小,不仅是依赖缓冲区大小肯定窗口大小
拥塞控制与流量控制的区别
TCP 拥塞控制分为两个部分
慢开始和拥塞避免
拥塞窗口增长,慢慢提速(指数递增),试探网络承受能力,避免扰乱网络通道的秩序
初始阈值后,加法增长拥塞窗口,直至到最大拥塞窗口
,缓冲区已满,还有ACK请求的话,数据包会被丢弃初始阈值数改成最大拥塞窗口的一半,而后拥塞窗口数降为0,从新开始 慢启动 过程
快速重传和快速恢复
收到3个重复的ACK请求则执行快重传,将丢失的数据包从新发送一遍
为何会出现粘包/拆包
通俗讲
tcp发送缓冲区中
,与服务端经过TCP链接
,在这个阶段,不一样的请求可能被合并为一个请求(粘包)而后经过 socket通讯 将数据发送到服务端 tcp 接收缓冲区中
TCP链接
中,可能会将一个请求拆分为多个请求数据包发送到服务端tcp发送缓冲区中
理论
拆包
网卡将应用屡次写入的数据发送到网络上
,这将会发生粘包
拆包
粘包
如何获取完整应用数据报文(四种方式)?
\n
名词 | 解释 |
---|---|
以太网标头 | MAC地址 |
IP标头 | ip 和port |
TCP标头 | TCP 传输的类型和数据包的长度 |
应用层数据包 | 实际数据包 |
Http 协议
Websocket 协议
101 Switching Protocols
切换协议,升级成 WebsocketWebsocket Data 协议
名词 | 解释 |
---|---|
FIN |
标识是否是最后一条数据包 |
RSV1或2或3 |
通常是0,表示是否是有拓展协议 |
opcode |
数据包的类型 |
MASK |
是否是通过源码处理 |
Payload len |
数据包大小 |
信道
一个接收信道 和 一个发送信道
单工通讯信道
有线电视、无线电收音机等
半双工通讯信道
不能双方同时发送,也不能同时接收
全双工通讯信道
分用-复用技术
封装成帧
SOH: 00000001
EOT: 00000100
透明传输
差错检测
物理层只管传输比特流,没法控制是否出错,数据链路层负责起差错检测
的工做
检测机制
奇偶检验码:传输前将一个字节中的8位加起来,若为偶数,则校验码为1,若为奇数,则校验码为0
,服务端的数据链路层进行一样的运算,若校验码与客户端不一样,则数据出错
循环冗余校验码 CRC:一种根据传输或保存的数据而产生固定位数校验码
的方法,检测
数据传输或者保存后可能出现的错误,生成的数字计算出来而且附加到数据后面
MTU(Maximum Transmission Unit)
路径 MTU
局域网技术
,是一种应用于数据链路层的协议,使用以太网能够完成相邻设备的数据帧传输
目的地址 | 源地址 | 类型 | 帧数据 | CRC |
---|---|---|---|---|
6 | 6 | 2 | 46-1500 | 4 |
数据由路由器发送至服务端过程
路由器MAC地址表(数据链路层中)中有目的地记录
取出前6字节
,目的地址路由器MAC地址表中没有记录
广播
请求的数据包到 除A之外的端口
数据包跨设备传输(数据链路层没法解决,须要网络层)
虚拟互联网络
虚拟互联(解决以太网协议只能局域网传输的缺点)
的网络专一网络层的数据转发
解决了在虚拟网络中数据报传输路径的问题
,使用者不须要去关注IP 协议
点分十进制
来表示第一个4字节(第一行,版本和长度)
版本
:指IP协议的版本,通讯双方的版本必须一致,当前主流版本是4,即IPv4,也有IPv6首部长度
:用与标识首部的长度,单位为4个字节,IP首部最大长度为60字节(2^4 - 1 ) * 4
,但通常只推荐使用20字节的固定长度服务类型
:8位,用于标识IP包的优先级,但如今并未使用总长度
:占16位,最大数值为655352^16-1
,表示的是IP数据报总长度(IP首部+IP数据)第二个4字节(第二行,分片相关)
第三个4字节(第三行,报文寿命,校验以及上层传输层协议)
发送主机设置
,代表IP数据报文在网络中的寿命,(也能够说是通过路由器的个数)每通过一个设备,TTL 减1,当TTL=0时,网络设备必须丢弃该报文。TTL解决了当IP报文在网络中找不到终点的时候,避免了IP数据在网络中无限循环和收发,消耗带宽
第四个4字节(第四行)
第五个4字节(第五行)
MTU 与 MSS
MTU:一个网络包的最大长度,以太网中通常为 1500 字节;
MSS:除去 IP 和 TCP 头部以后,一个网络包所能容纳的 TCP 数据的最大长度;
当 IP 层有一个超过 MTU 大小的数据(TCP 头部 + TCP 数据)要发送,那么 IP 层就要进行分片,把数据分片成若干片,保证每个分片都小于 MTU。把一份 IP 数据报进行分片之后,由目标主机的 IP 层来进行从新组装后,在交给上一层 TCP 传输层。
这看起来井井有理,但这存在隐患的,那么当若是一个 IP 分片丢失,整个 IP 报文的全部分片都得重传。
由于 IP 层自己没有超时重传机制,它由传输层的 TCP 来负责超时和重传。
当接收方发现 TCP 报文(头部 + 数据)的某一片丢失后,则不会响应 ACK 给对方,那么发送方的 TCP 在超时后,就会重发「整个 TCP 报文(头部 + 数据)」。
所以,能够得知由 IP 层进行分片传输,是很是没有效率的。
因此,为了达到最佳的传输效能 TCP 协议在创建链接的时候一般要协商双方的 MSS 值,当 TCP 层发现数据超过 MSS 时,则就先会进行分片,固然由它造成的 IP 包的长度也就不会大于 MTU ,天然也就不用 IP 分片了。
IP 协议的转发流程
网络层中
,记录源IP 与 下一跳的IP,可类比数据链路层的MAC地址表每一跳(hop)的MAC地址都在变化
每一跳的IP地址始终不变
ARP 与 RARP 协议
(R)ARP
协议是 TCP/IP 协议栈里面基础的协议,ARP 和 RARP 的操做对程序员是透明的,理解该协议有助于理解网络分层的细节
子网划分
网络号
与 主机号
组成127.0.0.1:一般被称为本地回环地址(Loopback Address),不属于任何一个有类别地址类。它表明设备的本地虚拟接口,因此默认被看做是永远不会宕掉的接口。在Windows操做系统中也有类似的定义,全部一般在安装网卡前就能够ping通这个本地回环地址。通常都会用来检查本地网络协议、基本数据接口等是否正常的。
子网划分的缘由:当使用A类或B类网络号时,主机数量分别为2^16-2 和 2^8-2
,为了更充分利用不一样分类的主机数量,因此在从网络号后开始,划分子网
快速判断某个IP所属的网络号:利用子网掩码 与 当前 IP 地址进行与运算
子网掩码:
无分类编址CIDR
定义
网络前缀
相同的IP地址称为一个 CIDR地址块
背景
现阶段更多使用 CIDR 方式,相比原来子网划分更加灵活
多个主机 经过 一个公有IP 访问互联网的私有网络中
分类
三类内网地址
网络地址转换NAT 技术
ICMP(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络自己的消息。这些控制消息虽然并不传输用户数据,可是对于用户数据的传递起着重要的做用,当路由器在处理一个数据包的过程当中发生了意外,能够经过ICMP向数据包的源端报告有关事件
封装在IP 数据报中的数据中,经过IP协议进行数据传输,主要是进行网络中的错误以及异常报告
差错报文
询问报文
ping 命令使用 ICMP 回送请求和应答报文
在网络可达性测试中使用的分组网间探测命令 ping 能产生 ICMP 回送请求和应答报文。目的主机收到 ICMP 回送请求报文后马上回送应答报文,若源主机能收到 ICMP 回送应答报文,则说明到达该主机的网络正常。
Ping 排查网络故障步骤以下:
路由分析诊断程序 tracert 使用了 ICMP时间超过报文
经历的路径详细信息
,并显示每一个路径所消耗的时间
。自治系统
自治系统 层次划分
RIP 协议的过程
FTP | HTTP | HTTPS | DNS | TELNET |
---|---|---|---|---|
21 | 80 | 443 | 53 | 23 |
中止等待协议
超时重传:发送方发送消息,接收方未收到;接收方发送确认消息,发送方未收到
中止等待协议对信道的利用效率不高
,它是最简单的可靠传输协议
连续协议
ARQ(Automatic Repeat request):自动重传请求
核心:滑动窗口 与 累计确认
TCP 协议的选择重传
选项字段
记录了当前TCP报文的边界信息
,当报文丢失时,会根据这个边界信息重传范围内的TCP报文
,而不是某个确认序号的报文但愿发送方不要发送数据太快
慢启动算法
慢启动阈值(ssthresh)
拥塞避免算法
传输速率
Mbps
,速率:bps=bit/s时延
受限于计算机网卡,由计算机硬件决定的
,如千兆网卡,百兆网卡受限与传输介质
,如介质为铜线或者光纤,不一样介质传播速率不同往返时间 RTT
传输方式
分组
通讯链路与分组交换机
进行数据报文
交换来通讯,报文是由数据块分组构成
分组交换
存储时延
输出缓存
与输出队列
与之对应,新到达的分组发现路由器正在接收其余分组时,就会在输出队列中进行排队 ,这种等待分组转发耗费时间为***排队时延
丢包
:路由器输出队列是有限制的,当多条链路同时发送分组致使输出缓存没法接受超额的分组后,这些分组会丢失(到达的分组或已排队的分组将会被丢弃),在实际状况中,经过限制端系统之间的吞吐量
来控制数据丢失。