说到计算机网络原理,大家可能马上联想到,七层协定,传输层,链路层,三次握手四次挥手 ;前端的同学,还会想到咱们用Crome F12 的 network 外面的 headers,状态码 等。后端同学可能会联想到,抓包,路由网关 等。你们联想到什么关键字,欢送留言哟!
那么,咱们来提出几个问题:
- 七层协定之间是如何传输的?什么是包、帧、段?
- TCP/IP 协定是什么?TCP 和 UPD 有什么区别?
- 什么是三次握手四次挥手?为什么要握手和挥手?
- 浏览器 network 的 HTTP headers 和 TCP headers 有什么区别?
上面,咱们就一一答复下面的问题。
七层协定之间是如何传输的?什么是包、帧、段?
看上图,所以数据、段、包、帧、比特,讲的其实都是一个货色,只是因为所在的地位不同,作为专有名词的名字不同。
- 咱们先看一下最上层的数据,Data 是应用层协定产生的数据,例如拜访网页、看视频、听音乐,这些都能够称为应用层数据,电脑的操作系统会把这些应用层数据依照肯定的规定传给下一层传输层。
- 在传输层,咱们看到的数据称之为 Segment,中文意思是段。在这一层,数据会被加上 TCP 或者 UDP 头,变成一个应用程序特有的数据。操作系统就是通过 TCP 或 UDP 端口号来区别不同应用程序的。
- 当数据再被往下传输的时候,就变成了 packet,即“包”的意思。在这一层,Segment 会被加上 IP 头部信息,而后就能够在三层传输了,而工作在三层的路由器会依据目标 IP 地址来转发这些”包“。
- 在往下,数据就会被加上 MAC 地址信息,名称就变成了 Frame,”帧“。在这一层,就是交换机的世界了,交换机通常查找 MAC 地址表项来转发相应的”帧“。
下面的几个档次都能够应用 wireshark 抓包查看到具体的内容,比拟形象,例如上面,一层套着一层,显著能够看出帧、包、段、数据的区别。
那么,不同层之间,是如何通信的呢?
很多人讲到七层协定传输,会想到教材下图左,可是这七层是如何一层层相互形成的,更合乎大脑感官的是另一种认知模式,是一种洋葱形的构造,层层叠叠相互包裹,能够用下图示意:
一层一层传输,加上图一对应的头部信息,或者 mac 地址,进行封装,传给下一层。具体的也能够看上图抓包信息。每一层的数据,内容不同,叫不同的名字。
再往下面的物理层(layer1),咱们能看到的都是 BIT 流,它们出现给咱们的都是 0 和 1 这样的电气个性。他们将数字信号转化为物理信号,bits 转化为光信号。网络延时,个别在这一层,思考传输间隔和光速,光纤管道拥塞,包期待,TCP 做 Flow Control(流控),转化速率等,平时只有那些头发比拟稀少的硬件工程师才关注,咱们个别看不到。工作中咱们看到网络设备的物理层都曾经是十分成熟的内容,个别不会有问题。
各位看到这里,应该可能明确“帧”和“包 ” 区别了吧?其实很多的时候它们就是通用的,只是它们所在的网络档次不同,封装也不同。为了显示业余,个别咱们在探讨交换机相干的 layer2 内容时,能够把数据称之为”帧“,在探讨与路由器相干的 layer3 内容时,就把数据称之为”包“。他们是如何传输的,以上也做了解答。
TCP/IP 协定是什么?TCP 和 UPD 有什么区别?
计算机硬件通过网络通信,单方就要基于雷同的办法。比方,如何探测到通信指标、由哪一边先发动通信、应用哪种语言进行通信、怎么完结通信等规定都须要当时确定。不同的硬件、操作系统之间的通信,所有的这所有都须要一种规定。而咱们就把这种规定称为协定(protocol)。
TCP/IP 是互联网相干的各类协定族的总称,比方:TCP,UDP,IP,FTP,HTTP,ICMP,SMTP 等都属于 TCP/IP 族内的协定。TCP/IP 模型是互联网的根底,它是一系列网络协议的总称。这些协定能够划分为四层,别离为链路层、网络层、传输层和应用层。
也就是每一层都有本人的协定,咱们前端在浏览器调试的是 HTTP 协定,属于 TCP/IP 协定的一种。具体看下图:
- 应用层:负责向用户提供应用程序,比方 HTTP、FTP、Telnet、DNS、SMTP 等。
- 传输层:负责对报文进行分组和重组,并以 TCP 或 UDP 协定格局封装报文。
- 网络层:负责路由以及把分组报文发送给指标网络或主机。
- 链路层:负责封装和解封装 IP 报文,发送和承受 ARP/RARP 报文等。
咱们前端接触的比拟多的,就是应用层和传输层协定。
传输层协定外面有 UDP 和 TCP 协定,咱们来看看他们具体区别和利用场景。
UDP 和 TCP 协定区别
如上图:
TCP 向下层提供面向连贯的牢靠服务,UDP 向下层提供无连贯不牢靠服务。尽管 UDP 并没有 TCP 传输来的精确,然而也能在很多实时性要求高的中央有所作为 对数据准确性要求高,速度能够绝对较慢的,能够选用 TCP 咱们在第一局部,阐明了,从应用层到传输层,会加上 UDP/TCP 头,那什么状况加 UDP 头,什么状况加 UDP 头呢?以下别离进行阐明:
UDP
UDP 协定全称是用户数据报协定,在网络中它与 TCP 协定一样用于解决数据包,是一种无连贯的协定 UDP 有不提供数据包分组、组装和不能对数据包进行排序的毛病,也就是说,当报文发送之后,是无奈得悉其是否平安残缺达到的。
它有以下几个特点:
- 面向无连贯
首先 UDP 是不须要和 TCP 一样在发送数据前进行三次握手建设连贯的,想发数据就能够开始发送了。并且也只是数据报文的搬运工,不会对数据报文进行任何拆分和拼接操作。
具体来说就是:在发送端,应用层将数据传递给传输层的 UDP 协定,UDP 只会给数据减少一个 UDP 头标识下是 UDP 协定,而后就传递给网络层了。在接收端,网络层将数据传递给传输层,UDP 只去除 IP 报文头就传递给应用层,不会任何拼接操作。
- 有单播,多播,播送的性能
UDP 不止反对一对一的传输方式,同样反对一对多,多对多,多对一的形式,也就是说 UDP 提供了单播,多播,播送的性能。
- UDP 是面向报文的
发送方的 UDP 对应用程序交下来的报文,在增加首部后就向下交付 IP 层。UDP 对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。因而,应用程序必须抉择适合大小的报文。
- 不可靠性
首先不可靠性体现在无连贯上,通信都不须要建设连贯,想发就发,这样的状况必定不牢靠。
并且收到什么数据就传递什么数据,并且也不会备份数据,发送数据也不会关怀对方是否曾经正确接管到数据了。
再者网络环境时好时坏,然而 UDP 因为没有拥塞管制,始终会以恒定的速度发送数据。即便网络条件不好,也不会对发送速率进行调整。这样实现的弊病就是在网络条件不好的状况下可能会导致丢包,然而长处也很显著,在某些实时性要求高的场景(比方电话会议)就须要应用 UDP 而不是 TCP。
从下面的动态图能够得悉,UDP 只会把想发的数据报文一股脑的丢给对方,并不在意数据有无平安残缺达到。
- 头部开销小,传输数据报文时是很高效的。
UDP 头部蕴含了以下几个数据:
- 两个十六位的端口号,别离为源端口(可选字段)和指标端口
- 整个数据报文的长度
- 整个数据报文的测验和(IPv4 可选 字段),该字段用于发现头部信息和数据中的谬误
因而 UDP 的头部开销小,只有八字节,相比 TCP 的至多二十字节要少得多,在传输数据报文时是很高效的。
TCP
当一台计算机想要与另一台计算机通信时,两台计算机之间的通信须要畅通且牢靠,这样能力保障正确收发数据。比照下面的 UDP,就晓得为啥要握手和挥手了,目标就是为了保障牢靠的连贯。平时 TCP 用的场景更多。
TCP 协定全称是传输控制协议是一种面向连贯的、牢靠的、基于字节流的传输层通信协议,由 IETF 的 RFC 793 定义。流就是指不间断的数据结构,你能够把它设想成排水管中的水流。
- tcp 连贯过程,建设连贯,三次握手。
第一次握手 客户端向服务端发送连贯申请报文段。该报文段中蕴含本身的数据通讯初始序号。申请发送后,客户端便进入 SYN-SENT 状态。
第二次握手 服务端收到连贯申请报文段后,如果批准连贯,则会发送一个应答,该应答中也会蕴含本身的数据通讯初始序号,发送实现后便进入 SYN-RECEIVED 状态。
第三次握手 当客户端收到连贯批准的应答后,还要向服务端发送一个确认报文。客户端发完这个报文段后便进入 ESTABLISHED 状态,服务端收到这个应答后也进入 ESTABLISHED 状态,此时连贯建设胜利。
这里可能大家会有个纳闷:为什么 TCP 建设连贯须要三次握手,而不是两次?这是因为这是为了防止出现生效的连贯申请报文段被服务端接管的状况,从而产生谬误。
2. 断开连接,四次挥手
TCP 是全双工的,在断开连接时两端都须要发送 FIN 和 ACK,2* 2 就是 4 次啦。
第一次挥手 若客户端 A 认为数据发送实现,则它须要向服务端 B 发送连贯开释申请。
第二次挥手B 收到连贯开释申请后,会通知应用层要开释 TCP 链接。而后会发送 ACK 包,并进入 CLOSE_WAIT 状态,此时表明 A 到 B 的连贯曾经开释,不再接管 A 发的数据了。然而因为 TCP 连贯是双向的,所以 B 仍旧能够发送数据给 A。
第三次挥手B 如果此时还有没发完的数据会持续发送,结束后会向 A 发送连贯开释申请,而后 B 便进入 LAST-ACK 状态。
第四次挥手A 收到开释申请后,向 B 发送确认应答,此时 A 进入 TIME-WAIT 状态。该状态会继续 2MSL(最大段生存期,指报文段在网络中生存的工夫,超时会被摈弃)工夫,若该时间段内没有 B 的重发申请的话,就进入 CLOSED 状态。当 B 收到确认应答后,也便进入 CLOSED 状态。
所以,TCP 协定的特点:
1. 面向连贯
面向连贯,是指发送数据之前必须在两端建设连贯。建设连贯的办法是“三次握手”,这样能建设牢靠的连贯。建设连贯,是为数据的牢靠传输打下了根底。
2. 仅反对单播传输
每条 TCP 传输连贯只能有两个端点,只能进行点对点的数据传输,不反对多播和播送传输方式。
3. 面向字节流
TCP 不像 UDP 一样那样一个个报文独立地传输,而是在不保留报文边界的状况下以字节流形式进行传输。
4. 牢靠传输
对于牢靠传输,判断丢包,误码靠的是 TCP 的段编号以及确认号。TCP 为了保障报文传输的牢靠,就给每个包一个序号,同时序号也保障了传送到接收端实体的包的按序接管。而后接收端实体对已胜利收到的字节发回一个相应的确认 (ACK);如果发送端实体在正当的往返时延(RTT) 内未收到确认,那么对应的数据(假如失落了)将会被重传。
5. 提供拥塞管制
当网络呈现拥塞的时候,TCP 可能减小向网络注入数据的速率和数量,缓解拥塞
6.TCP 提供全双工通信
TCP 容许通信单方的应用程序在任何时候都能发送数据,因为 TCP 连贯的两端都设有缓存,用来长期寄存双向通信的数据。当然,TCP 能够立刻发送一个数据段,也能够缓存一段时间以便一次发送更多的数据段(最大的数据段大小取决于 MSS)
7.TCP 头部
一个 TCP Header 个别有 20 个字节,如果启用了 options,header 的长度能够达到 60 个字节。内容蕴含:
- 发送方端口号和接管方的端口号
- 发送方的序列号
- 接管方 ack 的序列号
- 从 CWR 到 FIN 的 8 个 bit
- ACK 和 SYN
- 校验
具体内容,能够到网上搜,不赘述。总之,外面蕴含了三次握手和四次挥手的内容,以及端口号校验码等,来确认两台机器的牢靠连贯。
浏览器 network 的 HTTP headers 和 TCP headers 有什么区别?
咱们下面说了这么多,大略晓得了 HTTP headers 和 TCP headers 的区别,http 是应用层的协定,tcp 是传输层牢靠连贯协定,tcp/ip 是协定族总称,不仅蕴含 tcp 和 http,还蕴含所有七层用到的所有协定。
当初咱们来理解一下 HTTP headers 内容
通用首部字段(General Header Fields):申请报文和响应报文两方都会应用的首部。
申请首部字段(Request Header Fields):从客户端向服务器端发送申请报文时应用的首部。补充了申请的附加内容、客户端信息、响应内容相干优先级等信息。
响应首部字段(Response Header Fields):从服务器端向客户端返回响应报文时应用的首部。补充了响应的附加内容,也会要求客户端附加额定的内容信息。
实体首部字段(Entity Header Fields):针对申请报文和响应报文的实体局部应用的首部。补充了资源内容更新工夫等与实体无关的信息。这些也是咱们跟后端交互,调用接口的要害信息
通用首部字段:
申请首部字段:
响应首部字段:
实体首部字段:
申请办法:
这篇文章写的太全了,我感觉超过不了,你们能够间接看原文:
最具体的 http 协定、tcp/ip 协定:https://www.cnblogs.com/daiji…
以上就是本文全部内容【完】