网络互连模型:
OSI 参考模型 1.物理层 2.数据链路层 3.网络层 4.运输层5.会话层6.表示层7.应用层
TCP/IP协议: 1.网络接口层 2.网际层 3.运输层 4.应用层
1,物理层
定义接口标准、结缆标准、传输速率、传输方式等。
信道
信息传输的通道,一条传输介质上可以有多条信道。
单工通信。 信号 只能往一个方向传输,任何时候都不能改变信号的传输方向。比如无线广播,有线电视。
半双工通信
信号可以双向传输,但必须交替,同一时间只能往一个方向传输。
全双工通信
信号 可以同时双向传输。
比如手机。
数据链路层
链路:从一个节点到相邻节点的一段物理线路(有线或无线),中间没有其它交换节点。
数据链路:在一条链路上传输数据时,需要有对应的通信协议来控制数据的传输。
不同类型的数据链路,所有的通信协议可能是不同的。
广播信道:CSMA/CD协议(比如同轴电缆,集线器等)
点对点信道:PPP协议。(比如2个路由器间的信道。)
路由器----路由器 , PPP协议。
封装成帧:
帧结束符 ---IP数据包---帧开始符.
最大传输单元MTU
每一种数据链路层协议都规定了所能够传送的帧的数据长度上限。
以太网的MTU为1500个字节。
透明传输,使用SOH作为帧开始符,使用EOT作为帧结束符。中间数据部分如果出现这两个关键词,就需要做转义处理。
差错检验 FCS ,把帧的数据部分+首部计算出得,为了确保传数的数据准备,错误就会被丢弃。
CSMA/CD协议 ,以太网 ,以太网帧
为了能够检测正在发送的帧是否产生了冲突,以太网的帧至少要64字节。
用交换机组建的网络,已经 支持全双工通信,不需要再使用CSMA/CD,但它传输的帧依然是以太网帧。
机算机0-----集线器-----------机算机1
用得CSMA/CD协议。
v2帧的格式 (ethernet v2标准)
字节: 6 6 2 46-1500 4
MAC帧 :目标MAC地址 源MAC地址 类型 数据 FCS
以太网使用曼彻斯特编码,接收端接帐帧过程只要发现没有信号挑变,就认为是结束了。不需要帧开始符和结束符。
在传递到物理层时,再会插入8个字节,叫前同步码(7字节),+帧开始定界符(1字节)
当数据部分的长度小于46字节时,数据链路层会在数据的后面加入一些字节填充,而接收端会将添加的字节去掉。
ppp协议(point to point protocol)
首部 IP数据包 尾部
7E FF 03 协议 信息部分 FCS 7E
address字段: 图中的值是0xFF,形同虚设,点到信道不需要源MAC,目标MAC地址
Control字段:图中的值是0x03,目前没什么用
Protocol字段:内部用到的协议类型
帧开始符,帧结束符 :0x7E
网卡
网卡接收到一个帧,首先会进行差错校验,如果校验通过则接收,否则丢弃。
wireshark 抓到的帧没有FCS,因为它抓到的是差错校验通过的帧(帧尾的FCS会被硬件去掉)
wireshark抓不到差错校验失败的帧。
网络层
网络数据包 由首部和数据两部分组成。
数据:由传输层传递下来的数据段
首部
固定部分(20个字节):版本(4位) 首部长度(4位) 区分服务(提高网络质量,8位) 总长度(16位) 标识(16位) 标志(3位,第一位,保留,第二位,1代表不允许分片,0代表允许分片 ,第三位,1代表不是最后一片,0代表是最后一片) 片偏移(13位 片偏移*8:字节偏移,每一片的长度是8的整数倍)
生存时间 (8位 每个路由器在转发之前将TTL减1,一旦发现TTL减0,路由器返回错误报告)
如果两个路由器都设置了默认路由,而这两个路由器都不知道计算机发送的目标ip,他们就会死循环,来回传递,如果加了生存时间,TTL减到0,就会停止。
协议(8位,表明封装的数据是使用了什么协议)
首部检验和(用于检查首部是否有错误,4个字节)
源Ip地址 (4个字节) 目标ip地址(4个字节)
可变部分 可选字段 可填充
数据部分 ,最大是1460字节。
首部+数据的长度之和,最大值是65535。
由于帧的数据不能超过1500字节,所以过大的IP数据包,需要分成片传输给数据链路层,每一片都有自己的网络层首部(IP首部)
将之分成片之后,又如何在服务器重新合并?
网络首部的标识,数据包的ID,当数据包过大进行分片时,同一个数据包的所有片的标识都是一样的。 有一个计数器专门管理数据包的ID,每发出一个数据包,ID就加1。
传输层(TCP,UDP)
TCP 可靠性传输,不丢包。 应用:浏览器,文件传输。HTTP HTTPS,FTP,SMTP,DNS
UDP不可靠传输,尽最大努力交付,可能丢包。 应用:音频,直播。 DNS.
UDP
是无连接的,减少了建立和释放连接的开销。
首部只有8个字节,16位源端口号,16位目的端口号,16位UDP长度,16位UDP检验和。
端口:2个字节,取值范围 0-65535
客户端的源端口是临时开启的随机端口。
防火墙可以设置开启/关闭某些端口来提高安全性。
netstat -an :查看被占用的端口
netstat -anb: 查看被占用的端口,占用端口的应用程序.
telnet 主机端口:查看是否可以访问主机的某个端口。
TCP(传输控制协议)
首部长度(数据偏移):4位,取值 0x0101~0x1111, 乘以4为tcp首部的长度。
因为有20字工的固定首部,所以数据偏移最小是5.
UDP中的首部中有个16位的字段记录了整个UDP报文段的长度(首部+数据)
但是,TCP的首部中仅仅有个4位的字段记录了TCP报文段的首部长度,并没有字段记录TCP报文段的数据长度。
tcp\udp的数据长度,完全可以由IP数据包的首部推测出来。
传输层的数据长度=网络层的总长度-网络层的首部长度-传输层的首部长度。
标志位
URG:当为1时,紧急指针字段才有效。表明当前报文段中有紧急数据,应优先尽快传送。
图上紧急指针里的数据生效。如果紧急指针中是8 ,则TCP数据部分的前8个字节代表着紧急数据。
ACK : 当ACK=1时,TCP确认号字段才有效。
RST:当RST=1时,表明连接中出现严重差错,必须释放连接,然后再重新建立连接。
SYN:当SYN=1、ACK=0时,表明这是一个建立连接的请求。
若对方同意建立连接,则回复SYN=1、ACK=1
FIN 当FIN=1时,表明数据已经 发送完毕 ,要求释放连接。
序号 首先传输的每一个字节都会有一个编号,在建立连接后,序号代表:这一次传给对方的TCP数据部分的第一个字节的编号。
确认号 在建立连接后,确认号代表:期望对方下一次传过来 的TCP数据部分的第一个字节的编号。确认号与下次服务器发来的序号是一样的。
窗口 这个字段有流量控制功能,用以告知对方下一次允许发送的数据大小(单位:字节)
tcp的几个要点:
可靠传输,中途丢包,可以补发。
在TCP通信过程中,如果发送序列中间某个数据包丢失,(比如1,2,3,4,5中3丢失了)
TCP会通过重传最后确认的分组后续的分组(最后确认的是2,会重传3,4,5)
这样原先已经 正确传输的分组也可能重复发送(比如4,5),降低了TCP性能。
为改善上述情况 ,发展出了SACK技术,告诉发送方哪些数据丢失,哪些数据已经 提前收到。
使TCP只重传发送丢失的包,(比如3),不用发送后续所有的分组。
tcp首部的选项部分就可以放一些SACK。
kind : 1字节,值为5代表这是SACK选项。
length: 1字节,表明SACK选项一共占用多少字节。
leftEdge 4字节 左边界
RightEdge 4字节 右边界
一对边界信息需要占用8字节,由于tcp首部的选项部分最多40字节,所以 SACK选项最多携带4组边界信息。
SACK选项的最大占用字节数=4*8+2=34
ARQ协议,自动重传请求。(具体不赘述)
A向B发送数据包,B接受数据包,有差错,丢弃有差错的报文,A没有极时得到B的响应,会进行超时重传。