文章目录
介绍
OSI七层模型、TCP/IP四层模型
OSI七层模型
开放式系统互联(Open System Interconnect,OSI)定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层、应用层),即ISO开放互连系统参考模型。
每一层实现各自的功能和协议,并完成与相邻层的接口通信。
TCP/IP四层模型
OSI参考模型
是学术上和法律上的国际标准,是完整的权威的网络参考模型。
TCP/IP参考模型
是事实上的国际标准,即现实生活中被广泛使用的网络参考模型。
网络协议
网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。
常见的协议有:(协议集合)
- TCP/IP协议:TCP(传输控制协议)和IP(网际协议)
- IPX/SPX协议
- NetBEUI协议
TCP/IP协议 毫无疑问是这三大协议中最重要的一个,作为互联网的基础协议,没有它就根本不可能上网,任何和互联网有关的操作都离不开TCP/IP协议。
对比 OSI、TCP/IP
(简图)
OSI七层网络模型 | TCP/IP四层概念模型 | 对应网络协议 |
应用层(Application) e.g. 文件传输,电子邮件,文件服务,虚拟终端 | 应用层(Application Layer) | 高级LB, WAF HTTP(超文本传输协议), TFTP, FTP, NFS, WAIS, SMTP, IMAP |
表示层(Presentation) e.g. 数据格式化,代码转换,数据解密 | Telnet, Rlogin, SNMP, Gopher, JPEG, ZIP | |
会话层(Session) e.g. 解除或建立与其他接点的联系 | SMTP, DNS, NFS, SQL, SMB, SIP | |
传输层(Transport) e.g. 提供端对端的接口 | 传输层(Transport Layer) | 普通LB TCP(Segment), UDP(Datagram), DCCP, SCTP, RTP, RSVP TCP端口: 21 ── FTP 22 ── SSH 80 ── HTTP 443 ── HTTPS UDP端口: 53 ── DNS 123 ── NTP 161 ── SNMP 数据的单位成为数据段 (Segment) |
网络层(Network layer) e.g. 为数据包选择路由 | 网络层 | 路由器,防火墙 IPv4, IPv6, ICMP, RARP, AKP, UUCP 数据的单位称为数据包(packet) |
数据链路层(Data Link Layer) e.g. 传输有地址的帧,错误检测功能 | 数据链路层 | 网桥,交换机 FDDI, Ethernet, ARP, MAC, Arpanet, PDN, SLIP, PPP 数据的单位称为帧(frame) |
物理层(Physical Layer) e.g. 以二进制数据形式在物理媒体上传输数据 | 网卡,网线,集线器,中继器,调制解调器 5类、6类、OM2、OM3 IEEE 802.1A, IEEE 802.2到IEEE 802.11 数据的单位称为比特(bit) |
(全面)
物理层
物理层处于整个 osi 标准的最底层,它与数据链路层一样,工作在单条线路上,只负责线路两端的通信维护。
(屏蔽传输媒体和通信手段的差异,为数据链路层提供服务)
一些基本概念
- 数据(data)——运送消息的实体。
- 信号(signal)——数据的电气的或电磁的表现。
- “模拟的”(analogous)——代表消息的参数的取值是连续的。
- “数字的”(digital)——代表消息的参数的取值是离散的。
- 码元(code)——在使用时间域(或简称为时域)的波形表示数字信号时,代表不同离散数值的基本波形。
# 数据传输类型
在物理层的传输介质中传输的信号共分为两种
- 模拟信号(家里的电话、有线电视就是用的模拟信号)
- 数字信号(电脑上网就用的是数字信号)
数据传输媒介: (更多 🔗)
modem(猫:调制解调器)
modem 不是吧数据传输媒介。但说到模拟信号就必须说一下modem
modem就是将数字信号和模拟信号进行相互转换的
- 调制:将数字信号转换为模拟信号
- 解调:将模拟信号转换为数字信号
双绞线
同轴电缆
光纤
光纤只是一种传输介质,在光纤网络中即可以传输模拟信号也可以传输数字信号,实际传输的是什么信号是有两端的物理层设备决定的。
# 信道
信道:信号传输的媒介
按照使用的信道数量可以分为“串行通信”和“并行通信”
- 串行通信:
将一个字符的二进制代码按从低位到高位顺序传输,传输中需要建立一个信道。 - 并行通信:
将一个字符的二进制代码同时通过8条信道同时传输,每发送一个字符都需要建立8条信道,成本较高。
于是衍生出不同“信道交互信息的方式”:
- 单向通信(单工通信)——只能有一个方向的通信而没有反方向的交互。
- 双向交替通信(半双工通信)——通信的双方都可以发送信息,但不能双方同时发送(当然也就不能同时接收)。
- 双向同时通信(全双工通信)——通信的双方可以同时发送和接收信息。
基带信号——来自信源的信号,包含了较多的低频成分,为使信道能够传输低频分量和直流分量,需要进行调制,调制可分为下面两大类:
信道的极限容量:
香农定理
极限信息传输速率C = W log2(1+S/N) b/s
(低于C即可实现无差错传输)
提高信息传输速率的方法:
让每个码元携带更多比特的信息量——即一个码元是3个bit的话,相较于原来的情况,同样时间传输的信息量就增加了3倍,因为传输速率与数据量无关。
# 协议(了解)
物理层都有那些协议
- 电话网络modems-V.92
- EIARS-232,EIA-422,EIA-423,RS-449,RS-485
- Ethernet physical layerIncluding10BASE-T,10BASE2,10BASE5,100BASE-TX,100BASE-FX。100BASE-T,1000BASE-T,1000BASE-SX还有其他类型
- Varieties of 802.11Wi-Fi物理层
- DSL
- ISDN
- T1 and otherT-carrierlinks, and E1 and otherE-carrierlinks
- SONET/SDH
- Optical Transport Network(OTN)
- GSMUm air interface物理层
- Bluetooth物理层
- IEEE 1394 interface
- TransferJet物理层
- Etherloop
- ARINC 818航空电子数字视频总线
- G.hn/G.9960物理层
- CAN bus(controller area network)物理层
这么多协议,只需记住物理层协议就分为两类:
- 点对点通信线路物理层协议
- 广播通信线路物理层协议
其中广播通信线路又分为:- 有线通信线路:就是咱们常说的网线形式的网络
- 无线通信线路:无线通信线路就是WIFI
数据链路层
三个基本问题:
- 封装成帧:
帧是数据链路层的传送单位。
一个帧的帧长等于帧的数据部分加上帧的首部和尾部的长度。首部和尾部的一个重要作用是帧定界(确定帧的界限)。
每一种链路层协议都规定了所能传输的帧的数据部分的上限既最大传输单元MTU。
- 透明传输:
表示无论什么样的比特组合的数据,都能按照原样没有差错的通过这个数据链路层。 - 差错检验:
实现无比特差错。传输错误的比特占传输比特总数的比特率称为误码率BER(Bit Error Rate)。数据链路层采用 循环冗余检验CRC 的检错技术。过程如下:
更多:
- 使用点对点信道的数据链路层:
ppp协议 - 使用广播信道的数据链路层:
CSDA/CD协议:(Carrier Sense Multiple Access with Collision Delection)载波监听、多点接入、碰撞检测
网络层
私网地址
- 10.0.0.0/8
- 172.16.0.0/12 ── 172.16.0.0 ~ 172.31.255.255
- 192.168.0.0/16
TCP协议
(TCP报文结构)
# 三次握手
(流程图)
-
客户端
发送连接请求报文段
将同步序号(Synchronize Sequence Numbers,SYN)标识设为1
将序号(Sequence Number,seq)置为x(x为随机产生的一个值)
然后进入SYN_SEND状态
(同步发送状态)
-
服务器
收到SYN报文段进行确认
将SYN标识位置为1
确认序号(Acknowledgment Number,ACK)标识置为1
(当ACK=1时,确认字段才有效。当ACK=0时,确认号无效。)
序号(Sequence Number,seq)置为y(y为随机产生的一个值)
确认序号(Acknowledgment Number,ack)置为x+1
然后进入SYN_RECV状态
(同步接收状态,半连接状态)
-
客户端
再进行一次确认
确认序号(Acknowledgment Number,ACK)标识置为1(此时不用SYN)
确认序号(Acknowledgment Number,ack)置为y+1
序号(Sequence Number,seq)置为x+1(此时不用SYN)
发向服务器
最后客户端与服务器都进入ESTABLISHED 状态
(建立连接状态)
为什么在第3步中客户端还要再进行一次确认呢?
这主要是为了防止已经失效的连接请求报文段突然又传回到服务端而产生错误的场景:
.
- 所谓"已失效的连接请求报文段"是这样产生的。
正常来说,客户端发出连接请求,但因为连接请求报文丢失而未收到确认。
于是客户端再次发出一次连接请求,后来收到了确认,建立了连接。
数据传输完毕后,释放了连接,客户端一共发送了两个连接请求报文段,其中第一个丢失,第二个到达了服务端,没有"已失效的连接请求报文段"。
.- 现在假定一种异常情况,即客户端发出的第一个连接请求报文段并没有丢失,只是在某些网络节点长时间滞留了,以至于延误到连接释放以后的某个时间点才到达服务端。本来这个连接请求已经失效了,但是服务端收到此失效的连接请求报文段后,就误认为这是客户端又发出了一次新的连接请求。于是服务端又向客户端发出请求报文段,同意建立连接。假定不采用三次握手,那么只要服务端发出确认,连接就建立了。
.- 由于现在客户端并没有发出连接建立的请求,因此不会理会服务端的确认,也不会向服务端发送数据,但是服务端却以为新的传输连接已经建立了,并一直等待客户端发来数据,这样服务端的许多资源就这样白白浪费了。
.采用三次握手的办法可以防止上述现象的发生。比如在上述的场景下,客户端不向服务端的发出确认请求,服务端由于收不到确认,就知道客户端并没有要求建立连接。
# 四次分手
当客户端没有数据再需要发送给服务端时,就需要释放客户端的连接,这整个过程为:
-
客户端
发送一个报文给服务端(没有数据)
其中FIN设置为1
序号(Sequence Number,seq)置为u(随机)
客户端进入FIN_WAIT_1状态
-
服务端
收到来自客户端的请求(会做两件事)
-
发送一个ACK给客户端
ACK置为1
确认序号(Acknowledgment Number,ACK)置为u+1
Sequence Number为v
服务端年进入CLOSE_WAIT状态
(等待关闭连接状态)
-
发送一个FIN给客户端
FIN置为1
ACK置为1
Sequence置为w
Acknowledge置为u+1
用来关闭服务端到客户端的数据传送
服务端进入LAST_ACK状态
(最后一次确认状态)
客户端
收到FIN后,进入TIME_WAIT状态
接着发送一个ACK给服务端
Acknowledge置为w+1
Sequence Number置为u+1
最后客户端和服务端都进入CLOSED状态
# Wireshark 分析数据传输过程
HTTP、HTTPS
参考: https://blog.csdn.net/LawssssCat/article/details/103631318