网络协议学习(二)
一、网络分层
传输数据就是穿衣脱衣的过程
1、物理层
物理层定义了接口标准,线缆标准、传输速率、传输方式
(1)数字信号和模拟信号
(2)数据通信模型
(3)信道
定义: 一条传输介质上又多条信道(比如网线)
2、数据链路层
(1)链路
集线器直接当作网线处理
(2)数据链路层-封装成帧
(3)数据链路层-透明传输
(4)数据链路层-差错检验
通过fcs计算比较,判断数据是否出错
(5)CSMA/CD协议
虽然交换机已经全双工通信,已经不需要CSMA协议了。
注意:必须要64字节得原因是因为在冲突得时候,你可以发现返回得是冲突信号还是正常信号
Ethernet V2帧
完整以太网帧
(6)PPP协议
因为是点到点的协议所以在ppp协议中源mac和目标mac是形同虚设 ,在上一个协议中因为是广播信号,所以需要mac地址导航
3、网络层
定义:网络层数据包(IP数据包),由首部、数据2部分组成;
(1)版本、首部长度
首部长度:统计首部部分的长度
(2)总长度
(3)区分服务
占8位字节,提供更高质量的网络服务(当有区分服务的时候优先通过或者满足特殊需求)
(4)标识
当总长度大于1500字节的时候会分片,每一片都有自己的ip首部(也就是上述所说的总长度),但是传输后需要合并,这个时候就需要我们的标识符进行区分;
(5)片偏移
当标识符区分了之后,但是分片的顺序不知道哪片在首部,哪片在尾部,这个时候需要片便偏移
因为字节偏移太大,所以除以8得到片便宜
(6)标志
作用在于判断是否为最后一片
(7)首部检验和
计算数据与其他数据比较,判断数据是否出错
(8)协议
(9)生存时间
当两个路由器的下一条都是默认路由,并且都没有储存相关的路由,可能会在两个路由之间一直传输,导致浪费流量,造成损失。所以需要设置生存时间。
可以通过ping命令后面的Tll的值来获取对方的操作系统
设置TTL为1,到了网关就减没了。
4、传输层
作用:负责传输响应,保证传输的可靠性。
一般只看当前的状态和信息的时候使用UDP,举例:如果使用tcp当昨天的消息网络不通后,会继续发送,导致聊天混乱。
UDP
1、UDP-数据格式
2、UDP-端口
可以设置防火墙阻止访问端口,只有内部才能访问。
TCP
1、TCP-数据格式
一个细节
(1)数据偏移
因为头部至少为20,所以数据偏移至少为5
(2)保留
全为0,暂时没用上,6位或者3位
(3) 标志位
(4)序号、确认号、窗口
序号是记录发送数据的第一位的编号,确认号是为了保持数据的顺序性,和序号组合使用,当接收到1-100的数据之后,确认号就是101,期待101序号发送过来
TCP的几个要点
1、可靠传输
停止等待ARQ协议,自动重传,必须得到响应,没得到响应就会重新发送
但是这样效率低,所以需要连续ARQ+滑动窗口协议(连续发送4个)
建立连接的时候,接收方就会告诉发送方自己会接收多少字节的大小,当确认收到400字节后,滑动窗口就会往左边滑动,恢复ack和Ack(ACK相同时候说明同一请求)
滑动窗口例子
相关问题
(1)SACK技术:当丢包的时候可以判断发送重复包,可以放在tcp首部的选项部分,kind:5
(2)重传多次:当重传多次之后,就会发送reset报文(释放链接并且重新建立连接)
(3)返回大文件的时候,在传输层就已经开始分片了,根据窗体的大小,在传输层中就开始分片的原因如下:
因为响应的结果是在传输层进行传输的,当不在传输层切割的时候,如果掉包,服务器传输层就会不发送ACK,客户端发现响应不了,就会重新发包,但是由于传输层是一整块,不知道是那一部分丢包,所以又会发送一整块,造成效率降低,所以需要在传输层分片,丢包的时候可以精准的发送丢失的那一块小包。
(4)如图
2、流量控制
举例:rwnd就是对方窗口大小,在响应恢回复的时候发送窗口大小
3、拥塞控制
背景
类似于道路上开车,堵车,所以需要进行拥塞控制
拥塞控制的方法
(1)几个缩写
所以MSS是1460,在连接的时候,发送方和接收方会互相沟通自己的MSS,然后取双方的最小值,
其余:真正发送的包的大小是由拥塞窗口和接收窗口共同决定,当网络畅通,拥塞窗口自然变大
(2)慢开始
慢慢变多发包的速度,越来越多,呈两倍增长(试探性的发包)
(3)拥塞避免
当慢开始之后,在cwnd达到阈值,就开始不成倍增长,开始呈线性增加(拥塞避免)
(4)快重传
当收到连续3个重复确认(实际是4个)发送方就会重新发送丢失的包,就不会等待就收完毕后在发包
(5)快恢复
丢包之后不用继续慢开始
(6)发送窗口最大值
4、建立连接
序列号和确认号
(1)三次握手后建立连接,服务器开始分片发送值
(2)建立连接的时候 ,就开始定义序号的起始值,防止被人很容易破解
(3)客户端与服务器的连接以及发送流程
大致流程
三次握手
前两次握手的特点
问题:
为什么要三次握手,两次不行吗?
当网络延迟,可能出现第一次发送的连接在释放之后才到,这样的话,又建立了一个链接,但是客户端已经执行完了操作,导致此次的连接不能释放,所以会浪费资源。采取三次握手的话,需要确认,当迟到的在服务器确认的时候,客户端可以不响应确认,链接就可以自动释放。
第三次握手失败会发送什么事情?
5、释放连接
四次挥手
问题:
如果只有三次挥手的话,服务器发送fin之后突然断开,并且丢包,客户端会一直等待
为什么需要等待时间
保活、心跳包
保活:每隔一段时间发送心跳包,保持连接(因为可能出现服务器浪费资源,后续会在应用层添加逻辑使得三次握手后隔一段时间没有数据就会断开连接)。
为什么会出现三次挥手(实际上还是四次挥手)
两次同时fin是促发closing
完整的TCP操作
相关知识点补充
(1)什么是长连接,什么是短连接
短连接:进行一次数据交互就断开就是短连接
长连接:三次握手创建连接之后,不会断开,可以一直交互
(2)假设数据太多,网卡接受不过来怎么处理
直接丢弃
(3)conn是即时连接互不影响(java中的shock)
5、应用层
常用协议
(1)域名
由于ip地址不容易记住,所以出现了域名(但是域名占的空间太大,所以仍然使用ip传递)
顶级域名(后缀)
二级域名
(2)DNS域名系统
发送域名的时候,会进入DNS服务器,使用DNS协议获取ip地址,他是多台服务器,从顶级开始一步一步的找到自己想找的域名服务器,如下图所示:
常用命令
注:www没啥用,万维网老板也后悔,多浪费1s,增加温室效应。
(3)IP地址的分配
静态ip
地址需要手动设置,一般使用不怎么挪动的电脑
动态ip(DHCP)
动态主机配置协议
如果看完对自己有所帮助,请点赞支持,谢谢