ICMP协议
ICMP概念
ICMP解决路径优化问题,可以看做是IP协议的伴生协议。TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。
- 控制消息有:网络通不通,主机是否可达,路由是否可用等
ICMP:internet control message protocol因特网控制消息协议:用来反馈你连不到网时的消息
1) 查询
2) 控制
3) 差错检测
a) ping可以检测网络是否通畅
Protocol=1:用来解释上层封装的内容,协议号。
差错检测
错误报告报文
- 差错报告报文五种
- 目的不可达
- 源抑制
- 超时
- 参数问题
- 重定向
目的不可达
IP地址
IP地址概念
- IP地址:互联网协议地址 Internet Protocol Address
- 网络位:面,山西 192.168.1
- 主机位:点,家 1
- 主机位为0:网络测试地址
- 主机位为255:广播地址
- 二进制,8个数,32位,4段。
- 2^32共42.9亿个IP
子网掩码
- 子网掩码:用来告诉PC网络位与主机位个数
○ 子网掩码&IP=网络号
IP分类
- A类: 8位网络位,初始0,24位主机位
- 0.0.0.0-127.255.255.255
- 默认子网掩码:255.0.0.0
- B类: 16位网络位,初始10,16位主机位
- 128.0.0.0-191.255.255.255
- 默认子网掩码:255.255.0.0
- C类: 24位网络位,初始110,8位主机位
- 192.0.0.0-223.255.255.255
- 默认子网掩码:255.255.255.0
- D类: 组播,初始1110,
- 224.0.0.0-239.255.255.255
- E类: 保留,初始1111,研究使用
- 240.0.0.0-255.255.255.255
- 255.255.255.255全网广播
- 注意:ABC单播地址,给一台设备使用。D组播地址,给一群设备使用。
七层封装
括号中的数字代表的是当前域所占的空间大小,单位是bit位。
七层包括:物理层 数据链路层 网络层
物理层
物理层负责两个硬件之间的底层通信。
物理层利用传输介质连接硬件,建立、管理和释放物理链路,实现比特流的传输。
物理设备
传输介质
双绞线(网线):
- RJ45水晶头:共八根,用四根,铜片压住
- 线序:T568A或者T568B
单纯的光纤的传播速度并不如铜线。但是光纤的河面非常宽,可以在单位时间内传输更多的数据。河面宽度可以看做电磁波频率,就是NHz,每秒改变高低电平的次数。光的频率远高于电在铜中的频率。
高频的电信号在铜线中会有很多的电磁干扰。
同轴电缆(光纤):
- 中国人发明
玻璃纤维(Sio2)易折断
光纤的传输速度:贼拉快。
传输距离
串口电缆
- 传输距离短,带宽低
带宽概念点这里
集线器
将一些机器连接起来组成一个局域网。
调制解调器
数字比特流将数字信号1、0转化为电流强弱来进行传输,到达目的地后在转化为1、0,也就是我们常说的数模转换与模数转换。
调制
调制:将数字信号转换为模拟信号
解调
解调:将模拟信号转换为数字信号
数据链路层
黄色的是数据链路层的头部,一共14字节
-
目的MAC:当前step目的主机的mac地址
-
源MAC:当前step的源主机的mac地址
-
类型:指定网络层所用的协议类型,通常是IP协议,0x0800
作用
数据链路层控制网络层与物理层的通信。在一个节点向另一个物理链路直接相连的相邻节点发送数据报。
- 定义了如何格式化数据以进行传输,以及如何控制对物理介质的访问。
- 提供了错误检测和纠正,以确保数据的可靠传输。
数据链路层概念
- 数据链路层:控制网络层与物理层间的通信,解决结点到结点之间的可靠的数据传输。
- 以数据帧为单位进行传输,链路层分组称为帧。
- 用户发送的数据从应用层开始,从上往下逐层封装,到达数据链路层就被封装成数据帧。
- 组帧, 链路层封装网络层数据报,这个过程也叫组帧。
- 加头加尾,头是mac地址,尾是差错检测。
- 加头是在一帧的头中增加发送端与接收端的MAC地址标识数据帧的发送者与接收者。
- 物理寻址
- 在一帧的头中增加发送端与接收端的物理地址标识数据帧的发送者与接收者。,
- MAC在局域内唯一。
- 流量控制
- 匹配接收与发送端的速度。
- 差错控制分为差错检测和差错纠正
- 信号衰减和噪声会引起差错。
- 检测到差错之后通知发送端重传或者直接丢弃该帧。
- 常见的差错检测方法:奇偶校验,校验合,循环冗余校验码。
- 差错纠正,接收端直接纠正比特差错
- 访问(接入)控制
- 决定哪个设备拥有链路的控制权
- 以数据帧为单位进行传输,链路层分组称为帧。
MAC地址
网卡中就有MAC地址。保证在局域网内Mac地址唯一
MAc地址由IEEE统一管理与分配
MAC地址与IP地址的区别
一、地址长度的不同
1、MAC地址的长度为48位(6个字节),通常表示为12个16进制数,每2个16进制数之间用冒号隔开,如:00:50:29:5A:8H:1E就是一个MAC地址。
2、IP地址为32位,由用点分隔开的4个8八位组构成,如192.168.0.1就是一个IP地址,这种写法叫点分十进制格式。
二、所在寻址协议层上的区别
1、MAC地址应用在OSI第二层,即数据链路层。数据链路层协议可以使数据从一个节点传递到相同链路的另一个节点上(通过MAC地址)。
2、IP地址应用于OSI第三层,即网络层。网络层协议使数据可以从一个网络传递到另一个网络上(ARP根据目的IP地址,找到中间节点的MAC地址,通过中间节点传送,从而最终到达目的网络)。
三、 分配依据不同。
1、MAC地址的分配是基于制造商。
MAC地址由网络设备制造商生产时写在硬件内部。这个地址与网络无关,也即无论将带有这个地址的硬件(如集线器、网卡、路由器等)接入到网络的何处,它都有相同的MAC地址,是不可变的。
2、IP地址的分配是基于网络拓朴。
IP地址由网络地址和主机地址两部分组成,分配给这两部分的位数随地址类(A类、B类、C类等)的不同而不同。
多路访问控制Mac协议
采用分布式算法决定如何共享信道,决策节点何时可以传输数据。
全双工和半双工通信控制
链路层可以控制单工、双共与半双工的传输模式。
物理实现
链路层在适配器中实现。即网卡。
通信双方
发送端:接收数据报,加头加尾组帧
接收端:检测差错,提取数据报,交付上层处理。
网络层
蓝色的部分是IP头部,一般是20字节
-
版本:记录数据报属于哪一个版本的协议,如IPv4或IPv6
-
首部长度:指明IP头部长度,单位是字,也就是两个字节。该域的值最小为5,就是标准的头部长度;最大为15,表明有扩展部分。
-
服务类型:用来区分不同服务的需要
-
数据报总长:包含IP头部的数据报的总长度。注意,这里不包括链路层的头部,目前最大值是65535字节。
-
分组ID:这个域的作用是当一个大的数据报被拆分时,拆分成的小的数据段的这个域都是一样的。
-
标记:共三个bit,第一个未使用;第二个DF(Don’t Fragment),设置成1表示这个数据包不能被分割,这个是针对路由器的一条指令;第三个MF(MoreFragment),如果一个数据包被分割了,那么除了最后一个分段以外的所有分段都必须设置为1,用来表示后面还有更多的分段没有到达,最后一个设置为0,用来表示分割的段全部到达。
-
段偏移量:这个域有13bit,也就是每一个数据报最多有8192个分段。每一个分段的长度必须是8字节的倍数,也就是说8字节是分段的基本单位,当然分组的最后一个段不做限制。这样最大的数据报长度为8*8192=65536字节,比目前限制的最大数据报长度还多1,能够满足对网络中所有数据报传送的需求。
-
生存时间TTL:这是一个生存期计数器,最大为255s,但是实际上使用的时候用作跳数计数器,当值为0时数据报被丢弃,用来避免一个数据报过久的逗留在网络中。
-
高层协议:这里和链路层的类型作用相同,用来表示更高层的协议,这个数据报里是TCP
-
首部校验和:IP头部的校验和
-
源IP地址:数据报来源主机的IP地址
-
目的IP地址:数据报目的主机的IP地址
作用
网络层负责IP寻址及路由选择。提供主机之间的逻辑通信机制。
穿越多个网络,完成源主机到目的主机数据报的交付。
传输内容
网络层接收传输层传来的segment,发送主机将其封装到数据报中。
协议
ARP协议
ICMP协议
ip datagram
数据报/IP数据报(ip datagram):IP数据报就是地址加消息,在无连接网络中传输的数据包。
通常指使用无连接网络服务的,起始点和目的地都是网络层的信息单元。
IP数据报由TCP/IP协议定义,是在Internet上以数据报的形式传输的包。
IP数据报采用数据报分组的方式进行传输。
packet
数据包/分组(packet):数据报到达链路层之前可能还需要分片fragment。
数据包是IP层与链路层之间传输的数据单元。
给分片加头(控制信息)加尾就构成了一个分组。
一个分组可以是一个完整的数据报,也可以是一个数据报的分片。
抓包工具(Wireshark)抓到的就是这个packet。
IP分片
一个IP数据报如上图所示16到31是总长度占16字段,也就是2^16-1=65535Byte
总长度=首部长度+数据长度。
首部长度=20B
则IP分组最大数据65535-20=65515B。
当IP数据报的数据大小超过MTU(最大传输单元,一般为1500B及以上)的时候,IP数据报就需要分片了。
网络中不同媒介(电脑、路由器、交换机)的MTU各不相同,但一般大于等于1500B。
MTU的概念见这里
分片之后,各分片分别组成一个具有IP头部的分组,并独立选择路由。
个分组可以根据需要再次进行分片。称为分片IP分组。
分片控制
传输层使用DF(donot fragment)标志位可以限定该数据报不可以分片。如果该数据报的长度大于某个MTU,转发设备会将其丢弃,然后返回一个错误信息。
对于UDP来说,他是一个无连接的协议,不在意数据包的到达顺序,所以没有分片要求。
对于TCP来说,他是一个面向连接的协议,非常在意数据报的到达顺序及丢包,所以TCP一般要求DF。
TCP数据包
MSS:TCP数据包每次传输的最大数据。
为了不分片,TCP协议在三次握手的时候一般会协商双方的MSS值。
一般MSS=MTU-IP数据包包头长度-TCP报文段包头长度=1500-20-20=1460B.
分片重组
接受方在第一个分片到达的时候分配一个存储缓冲区,并启动一个计时器。
具有相同头部ID的分片会重新组装成一个数据报。13位片偏移则记录了IP片的相对位置。
当数据包陆续到达的时候,数据被复制到偏移量指出的位置。
如果收不到某片,计时器结束,将整个数据报相关的包全丢。这就是所谓的丢包,包就是IP分组。
IP数据包重组后上传给传输层,但IP数据报之间是不能保证有序的。
提供服务
地址管理
每个主机都有一个32位的身份唯一标识,但是网络设备太多了,32位不够用了。所以衍生出一系列解决方案。
动态分配IP地址
联网了才分配IP,不联网就不分配。治标不治本
NAT机制
允许局域网内部的IP地址重复。但广域网的IP唯一。
IPV6
- ipv4,共有4个字节,32位
- ipv6,16个字节一组,八组,128位
- ABCD:EF01:2345:6789:ABCD:EF01:2345:6789
查看:
本地连接-属性-双击-自己设定
WIN R + cmd ipconfig
16个字节,128位。但与IPV4不兼容。
网段划分
把IPV4分成两部分,网络号和主机号。
同一个局域网内的设备网络号相同,主机号不相同。相邻局域网内网络号不同。
子网掩码:255.255.255.0
如果IPV4为:192.168.0.1.
两者相与:192.168.0.0就是网络号。
路由转发
路由:确定数据报从源到目的经过的路径。
转发:根据转发表将数据报从路由器的输入端口转送到输出端口。
转发控制
转发控制由IP数据报的头部决定。
TTL
通过查询TTL可以看出一共转发了多少层。初值是64。逐层递减。
生存时间,当TTL减到零时被丢弃。
建立连接
建立一条虚电路网络。
虚电路就是一条从源主机到目的主机的类似于电路的逻辑路径。
源到目的经过的网络层设备共同组成虚电路。
硬件实现
源主源主机:将数据的封装到数据报中
目的主机:接收数据报,将其交付到传输层中。
每个主机和路由器都运行网络协议。
其中红色是IP地址,绿色是物理地址。
从数据分组来来看,原和目的是不变的。MAC地址的转发过程中四不断变化的。
路由器
检验所有穿越它的IP数据报的头部域。
维护转发表。
传输层协议
紫色部分是TCP头部,一般是20字节
-
源端口号:数据报来源主机的端口号
-
目的端口号:数据报目的主机的端口号
注意:源IP地址,目的IP地址,源端口号,目的端口号这四个字段唯一的确定了一个TCP链接。
-
TCP序号(sq):发送的TCP的序号,从0开始,实际中这个值就是发送的数据报中内容的字节数,比如我发送的第一个报中sq=0,数据报内容20字节,那么下一个数据报的sq就应该是21。
-
捎带的确认(ack):确认收到上一个数据报,然后ack的值是指定自己想要收到的下一个数据报的sq,比如我收到一个数据报的sq=0,数据报内容20字节,那么我的ack就应该是21,用来标明我sq=0,内容为20字节的数据报已经收到,我接下来期望收到的是sq=21的数据报。
-
首部长度:和IP头部的长度域类似,这个域用来标明TCP头部的长度,单位也是字。
-
保留:6bit未使用的域
-
Flag:从左到右,[URG|ACK|PSH|RST|SYN|FIN]
1)URG 紧急位,设置为1时,首部中的紧急指针有效;为0时,紧急指针没有意义 。
2)ACK设置为1表示前面的确认(ack)是有效的,否则前面的确认应被忽略。
3)PSH表示要求对方在接到数据后立即请求递交给应用程序,而不是缓冲起来直到缓冲区收满为止。
4)RST用于重置一个已经混乱的连接。
5)SYN用于建立连接的过程。在链接请求中,SYN=1和ACK=0表示该数据段没有使用捎带的确认域。链接应答则捎带了一个确认,即SYN=1和ACK=1.本质上SYN位是用来表示connection request 和connection accepted,然后进一步用ACK来区分是请求还是应答,的确很高明。
6)FIN用来释放一个连接。它表示发送方已经没有数据要传输了。然后,在关闭一个连接后,关闭进程可能会在一段不确定的时间内继续接收到数据。SYN和FIN数据段都有TCP序号,从而保证了这两种数据段被按照正确的顺序来进行处理。 -
窗口大小:指定了从被确认的字节算起可以发送多少个字节。
-
校验和:校验范围包括TCP头、数据报内容和概念性伪头部。概念性伪头部又包括源IP,目的IP,TCP协议号。
-
紧急指针:指向数据报中紧急数据最后一个字节的下一个字节。
最内部的是数据包内容
作用
传输层提供应用程序之间的逻辑通信机制。
传输内容
报文段/数据段(Segment/UPD Datagram):传输层将报文分组称为报文段。
TCP的报文段就叫报文段(Segment)。
UDP的报文段叫数据段也叫UDP数据报(UDP datagram)
报文段通常指起始点和目的地都是传输层的信息单元。
TCP
- 面向连接:TCP连接
三次握手
位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)
TCP序列号(seq number):发送的TCP的序号,从0开始,实际中这个值就是发送的数据报中内容的字节数,比如我发送的第一个报中sq=0,数据报内容20字节,那么下一个数据报的sq就应该是21。
确认号(ack number):确认收到上一个数据报,然后ack的值是指定自己想要收到的下一个数据报的sq,比如我收到一个数据报的sq=0,数据报内容20字节,那么我的ack就应该是21,用来标明我sq=0,内容为20字节的数据报已经收到,我接下来期望收到的是sq=21的数据报。
-
第一次握手
客户端A向服务器B发送位码为SYN=1(联机请求),随机产生seq number=1234567。
客户端进入SYN_SEND状态。 -
第二次握手
服务器B向主机A发送位码ack=1(联机确认),序列确认ack number=A序列号+1。
服务器B同时向主机A发送位码SYN(联机请求),随机产生seq number=7654321。
服务器进入SYN_RECV状态 -
第三次握手
客户端A向服务器B发送位码ack=1(联机确认),序列确认ack number=B序列号+1。
客户端同时向服务器B发送序列号seq number=A序列号+1。
客户端和服务器进入ESTABLISHED状态。
四次挥手
由于TCP是双共的,所以有两条信道需要断开。
- 第一次挥手
客户端A向服务器B发送位码FIN=1(结束请求)。 - 第二次挥手
服务器B向客户端A发送位码ACK=1(结束确认)。 - 第三次挥手
服务器B向客户端A发送位码FIN=1(结束请求)。 - 第四次挥手
客户端A向服务器B发送位码ACK=1(结束确认)。
三四区别
这是因为三次握手的时候,服务端在的 LISTEN 状态下的 socket 当收 到 SYN 报文的建立连接请求后,它可以把 ACK 和 SYN 放在一个报文里来发送。
但关闭连接时, 当收到对方的 FIN 报文通知时,它仅仅表示对方没有数据发送给你了;所以你可以立马发送ack确认客户端到服务器的连接断开。
但未必你所有的数据都全部发送给对方了,所以你可能还需要发送一些数据给对方之后,再发送 FIN 报文给对方来表示请求关闭服务器到客户端的连接。
所以它这里的 ACK 报文 和 FIN报文多数情况下都是分开发送的。
TIME_WAIT 状态还需要等 2MSL 后才能返回到 CLOSED 状态?
这是因为虽然双方都同意关闭连接了,而且挥手的 4 个报文也都协调和发送完毕,按理可以直接回到 CLOSED 状态;
但是因为我们必须要假想网络是不可靠的,你无法保证你最后发送的 ACK 报文会一定被对方收到。
也就是服务器处于 LAST_ACK 状态下的 SOCKET ,可能因为超时未收到 ACK 报文而重发 FIN 报文。
这个 TIME_WAIT 状态的作用 就是用来重发可能丢失的 ACK 报文。
至于为什么是2MSL参考这里
如果已经建立连接,但是客户端突然出现了故障会怎么办?
TCP还设有一个保活机制。显然,如果客户端出现了故障,服务端不能一直等下去。若等了一段时间还没有收到客户端的任何数据,服务端就会发送一个探测报文段,若一连发送10个探测报文段仍然没有反应,服务端就认为是客户端出现了故障,就会关闭连接。
采用两次握手行不行?
- 采用三次握手是为了防止失效的连接请求报文段突然又传送到主机B,因而产生错误。失效的连接请求报文段是指:主机A发出的连接请求没有收到主机B的确认,于是经过一段时间后,主机A又重新向主机B发送连接请求,且建立成功,顺序完成数据传输之后断开。
- 此时,主机A第一次发送的连接请求并没有丢失,而是因为网络节点导致延迟达到主机B,主机B以为是主机A又发起的新连接,于是主机B同意连接,并向主机A发回确认,但是此时主机A根本不会理会,主机B就一直在等待主机A发送数据,导致主机B的资源浪费。
可靠的数据传输
发送方滑动距离问题
文中有言:
连续ARQ协议规定,发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。如果原来已经发送了前5个分组,则现在可以发送窗口内的第6个分组。
接收方一般都是采用累积确认的方式。也就是说接收方不必对收到的分组逐个发送确认。而是在收到几个分组后,对按序到达的最后一个分组发送确认。如果收到了这个分组确认信息,则表示到这个分组为止的所有分组都已经正确接收到了。
这里是有一个矛盾的,接收方不会确认每个分组,只确认最后一个。那么发送方就不会一次向前滑动一个分组的位置了。而是每次向前滑动窗口大小个位置。如下
超时重传时间问题
文中有言:
超时重传的原理也很简单:发送方发送完一个分组后,就会设置一个超时计时器,如果超时计时器到期之前没有收到接收方发来的确认信息,则会重发刚发送过的分组;如果收到确认信息,则撤销该超时计时器。
这里其实涉及到一个概念,TCP连接的往返时间 RTT及计时器的超时时间RTO。
RTT和ROT的概念可以参考这里
拥塞控制
- 先整体理解一下什么是拥塞。
- 拥塞(非正式定义):主机发送了太多数据或者发送过快导致网络无法处理。
- 拥塞控制:当网络负载过重时限制发送方的发送速度。
快重传与快恢复问题
文中对快重传与恢复问题没讲到位。
如果发送方设置的超时计时器超时害没有收到确认,就很可能是出现了拥塞。即M2确认了之后,M3丢了。
这时,慢启动与拥塞避免的做法是:
- 把慢开始门限 ssthresh 设置为出现拥塞时的发送方窗口值的一半(但不能小于2)。然后把拥塞窗口 cwnd 重新设置为 1,执行慢开始算法。
这时,快重传与快恢复的做法是:
- 接收方收到M4后判断有一个失序报文段,就立即发出重复确认,而不要等到自己发送数据时才进行捎带确认,这样可以使发送方及早知道有报文段没有到达对方。发送方接着发送了M5和M6。接收方收到这两个报文后,也还要再次发出对M2的重复确认。这样,发送方共收到了接收方的四个对M2的确认,其中后三个都是重复确认。快重传算法还规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段M3,而不必继续等待M3设置的重传计时器到期。由于发送方尽早重传未被确认的报文段,因此采用快重传后可以使整个网络吞吐量提高约20%。
与快重传配合使用的还有快恢复算法,其过程有以下两个要点:
-
当发送方连续收到三个重复确认,就执行“乘法减小”算法,把慢开始门限ssthresh减半。这是为了预防网络发生拥塞。请注意:接下去不执行慢开始算法。
-
由于发送方现在认为网络很可能没有发生拥塞,因此与慢开始不同之处是现在不执行慢开始算法(即拥塞窗口cwnd现在不设置为1),而是把cwnd值设置为慢开始门限ssthresh减半后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。
流量控制
流量控制(flow control)就是让发送方的发送速率不要太快,既要让接收方来得及接收,也不要使网络发生拥塞。利用滑动窗口机制可以很方便地在 TCP 连接上实现流量控制。
- 设A向B发送数据。在连接建立时,B告诉了A:“我的接收窗口是 rwnd = 400 ”(这里的 rwnd 表示 receiver window) 。因此,发送方的发送窗口不能超过接收方给出的接收窗口的数值。请注意,TCP的窗口单位是字节,不是报文段。TCP连接建立时的窗口协商过程在图中没有显示出来。再设每一个报文段为100字节长,而数据报文段序号的初始值设为1。大写ACK表示首部中的确认位ACK,小写ack表示确认字段的值ack。
- 从图中可以看出,B进行了三次流量控制。第一次把窗口减少到 rwnd = 300 ,第二次又减到了 rwnd = 100 ,最后减到 rwnd = 0 ,即不允许发送方再发送数据了。这种使发送方暂停发送的状态将持续到主机B重新发出一个新的窗口值为止。B向A发送的三个报文段都设置了 ACK = 1 ,只有在ACK=1时确认号字段才有意义。
零窗口处理——持续计数器
-
考虑上面的例子中,当A发送的数据已经到达B的接收窗口上限,此时A就必须等待B处理了部分数据后,待接收窗口有空闲的时候,再次发送数据,那么A是怎么知道B的接收窗口何时有空闲呢?这时就用到了持续计时器。
-
TCP 为每一个连接设有一个持续计时器。只要 TCP 连接的一方收到对方的零窗口通知,就启动持续计时器。若持续计时器设置的时间到期,就发送一个零窗口探测报文段(仅携带 1 字节的数据),而对方就在确认这个探测报文段时给出了现在的窗口值。若窗口仍然是零,则收到这个报文段的一方就重新设置持续计时器。若窗口不是零,则死锁的僵局就可以打破了。
-
不提供
延迟保障
带宽保障
UDP
- 无连接
- 不可靠的数据传输
- 不提供
流量控制
拥塞控制
延迟保障
带宽保障
TCP和UDP的区别
设备实现
发送方:将应用递交的消息分成一个或多个Segment,并向下传输给网络层
接收方:将接收到的segment组装成消息,并向上交给应用层。
应用层
- 不同主机的进程通信
客户机进程:发起通信的进程
服务器进程:等待通信请求的进程。
传输内容
报文/消息(message):我们把应用层的信息分组称为报文。
报文包含了将要发送的完整的数据信息。
报文是网络传输的数据单元。
报文的起始点和目的地都是应用层。
协议
- 网络应用需要遵循应用层协议
公开协议,由RFC定义。HTTp就是公开的
私有协议:P2P,商业保密
开发网络应用,应该尽可能遵循公开协议。
设备实现
网络结构
C/S结构与B/S结构
- C/S结构
○ 客户端/服务器结构,如网盘
- B/S结构
○ 浏览器/服务器结构,使用浏览器访问服务器,如谷歌
- 网络通讯协议:
○ 通过计算机网络对多台计算机进行连接
计算机之间要进行通信,就必须遵守规则才能完成数据交换,它对数据格式、传输速率、传输步骤做了统一的规定。
通信相关
比特流
比特流(Bitstream)是飞利浦八八年提出的技术,构造很简单。首先二进制的数码信号进入一个有参考电压的模组中,输入信号比参考电压高输出就是1,反之则为0;第二个信号再与第一个信号比较,更高的就输出1,较低输出0…以此类推。
所谓比特流就是一串二进制信息,数据的传输现在大部分都是用的数字信号,也有模拟信号的。
说到数字信号与模拟信号就需要提到码元。
码元
一个码元就是一个脉冲信号,一个脉冲信号有可能携带1bit数据,也有可能携带2bit数据、4bit数据。
举个例子:把振幅分成四种,低(00)、中(01)、高(10)、很高(11),这样我发一个脉冲信号,它的振幅是低,那就说明发送的是00(也就是2bit),它的振幅是中(01),发送的就是01(也就是2bit)……也就实现了一个脉冲信号,携带2bit的功能。
比特率
单位时间内传输的比特。单位如下:
波特率
波特率指的就是1秒能发送多少个码元,也就是1秒能发送多少个脉冲信号。
一个码元能携带2bit数据,那么比特率 = 2倍的波特率。
通信方式
串行通信
传输时只建立一个信道,将一个字符的二进制代码按从低位到高位顺序传输。
双工:两边工作
全双工:打电话,双方同时说话,同时听,同时存在
半双工:对讲机,不同时存在。
单工:只能一方给另一方发消息
信道概念
并行通信
- 传输时简历八条信道,将一个字符的二进制代码同时通过8条信道同时传输。
- 并行通讯一般是指使用 8、16、32 及 64 根或更多的数据线进行传输的通讯方式。
数据传输模式
单工
只能向一个方向发送信息,一条信道,如电视
双工
可以同时发送信息和接收信息,两条信道,如电话
半双工(交替进行)
通信的双方都可以发送信息,但不能双方同时发送,两条信道,如对讲机。
信号
数字信号
当我们使用的码元数量有限的时候,是数字信号。
通俗说代表消息的参数的取值是离散的。
用户家中的计算机到调制解调器之间就是数字信号。
模拟信号
当使用的码元就是某个实数区间的时候,就是离散/模拟信号。
通俗说模拟代表消息的参数的取值是连续的。
调制解调器到电话端局之间的用户线上传送的就是模拟信号。
信道
信道一般都是用来表示向某一个方向传送信息的媒体。
带宽
- 在通信中带宽是指信号的频带宽度。即最高频率与最低频率之差。Hz .
- 在网络中带宽数字信道能传输的最高数据率(比特率)。单位bps
协议相关
物理层协议就分为两类,点对点通信线路物理层协议和广播通信线路物理层协议
点对点通信线路物理层协议
广播通信线路物理层协议
有线通信线路
有线通信线路就是咱们常说的网线形式的网络
无线通信线路
无线通信线路就是WIFI