1 OSI 7 层模型 ❤️❤️❤️❤️❤️❤️❤️
2、分层结构
1、物理层
简单的说,物理层确保原始数据可以在任何物理介质上传输。这个层上指定了激活,维持,关闭通信端口之间的机械,电⽓特性,功能特性,为高级协议传输数据提供物理媒体,该层传输位数流.
2,数据链层 ❤️ ❤️ ❤️
数据链接层提供可靠的传输在不可靠的物理媒体上。 该层的功能包括:物理地址、数据帧化、交通控制、数据检索、重复等。
3.网络层 ❤️ ❤️ ❤️
网络层负责分网间路由数据包,网络层可以实现拥塞控制、网络互联和其他功能,在这个层次上,数据单元称为数据包。
4、传输层
传输层是端到端的,即从主机到主机的级别。传输层负责分层上层数据并提供端到端可靠或不可靠的传输。此外,传输层也处理端到端误差控制和流量控制问题。在这⼀层,数据单元称为分段。
5,对话层 ❤️ ❤️ ❤️
该层管理主机之间的对话过程,负责建立、管理和终止过程之间的对话。对话层也使用数据中插入检查点来同步数据。建立和维持应用程序间通信的机制,包括访问验证和对话管理。如果服务器验证用户登录,则会由សម័យ层进行。使通信对话在通信无效时从验证点恢复通信. ⽐如说建⽴会话,例如, session authentication, interrupt point retransmission。
6、表示层
该层主要解决用户信息的语法表示问题.它将从一个适合特定用户的抽象语法交换数据,转换为适合在OSI系统中使用的传输语言.提供格式化表示和转换数据服务。数据压缩和解压缩,加密和解密工作由表示层完成.例如,图像和视频编码,数据加密。
7.应用层 ❤️❤️❤️
该层为操作系统或网络应用程序提供访问网络服务的接口。
层级传输协议、传输单元和主要功能设备的比较
| 名称 |
传输协议 |
传输单元 |
主要功能设备/接口 |
| 物理层 |
IEEE 802.1A、 IEEE 802.2 |
比特流 |
光纤 、 双线 、 继电器 、 集结器 、 电缆连接器 |
| 数据链路层 |
ARP、 MAC、 FDDI、 Ethernet、Arpanet、 PPP、 PDN |
frame 帧 |
⽹桥、⼆层交换机 |
| 网络层 |
IP、 ICMP、 ARP、 RARP |
包 |
路由器、三层交换机 |
| 传输层 |
TCP、UDP |
Segment/Datagram |
四层交换机 |
| 会话层 |
SMTP、DNS |
报文 |
QoS |
| 表示层 |
Telnet、SNMP |
报文 |
- |
| 应用层 |
FTP、TFTP、Telnet、HTTP、DNS |
报文 |
- |
4,描述TCP头? ❤️️
- 序列32(bit):流向传输方向的字符串的字符串数。初始时间序列设置为随机初始值(ISN),然后每次你发送数据,序列值 = ISN + 整个节点流中的数据偏差.假设A ->B且ISN = 1024,数据512字节的第一个段落已经达到B,在第二段中,传输数据的序列数为1024 + 512。它用于解决网络包故障问题。
- 确认数(32位):接收者对发送者TCP消息字段的响应,其值是接收的序列数+1.️
- 标题(4位):标识标题的4位数 * 标题最大15位,即60位。
- 标记位置(6位):
- URG: 标志紧急针是否有效.
- ACK: 标明确认号是否有效(确认条款)。
- PSH: 提示接收机立即从缓冲器读取数据.
- RST:要求另一方重新建立连接。
- SYN:请求创建连接(连接消息段)。
- FIN:表示连接的关闭(消息节的切断)。
- 窗口(16位):接收窗口。 缓冲器用来告诉对方(发送方)对方能接收多少字节数据。
- 校正和(16bit):接收端使用CRC检查整个消息段是否完整。
5,TCP三手和波 ❤️❤️❤️❤️❤️❤️❤️❤️❤️
1、三次握手过程
- 第⼀次:客户端发含SYN位, SEQ_NUM = S的包到服务器。(客 -> SYN_SEND)
- 第⼆次:服务器发含ACK, SYN位且ACK_NUM = S + 1, SEQ_NUM = P的包到客户机。(服 -> SYN_RECV)
- 第三次:客户机发送含ACK位, ACK_NUM = P + 1的包到服务器。(客 ->ESTABLISH,服 -> ESTABLISH)
2、四次挥手过程
- 第⼀次:客户机发含FIN位, SEQ = Q的包到服务器。(客 -> FIN_WAIT_1)
- 第⼆次:服务器发送含ACK且ACK_NUM = Q + 1的包到服务器。(服 ->CLOSE_WAIT,客 -> FIN_WAIT_2),此处有等待!
- 第三次:服务器发送含FIN且SEQ_NUM = R的包到客户机。(服 -> LAST_ACK,客-> TIME_WAIT)此处有等待!
- 第四次:客户机发送最后⼀个含有ACK位且ACK_NUM = R + 1的包到客户机。(服 -> CLOSED)
3.为什么三次握手,四次挥手?
- 握手:握手只确认双方通信时的初始化序列,保证通信不会乱序。第三项握手要求:假设服务端的认证丢失,连接并未断开,客户端加班重新登录连接请求,这样服务器可以维护多个与同一客户端的连接,造成资源浪费。)
- 对握手:TCP是双重的,所以发送者和接收者都需要FIN和ACK。
4.TCP连接状态?
- 关闭:初始状态。
- 听:服务器正在监视。
- SYN_SEND:客户端索克执行连接,发送SYN包,并输入这个状态。
- SYN_RECV:服务器接收SYN包,并向服务器发送SYN包进入这个状态。
- 建立:指示连接已建立,客户端发送最后的ACK包并输入这个状态,服务器接收最后的ACK包并输入这个状态。
- FIN_WAIT_1:终止者(通常是客户端)在发送 FIN消息后输入。
- CLOSE_WAIT:(假设服务器)在收到客户端Fin包后等待关闭阶段。收到另一方的信件后,当然, 必须 立即 把 ACK 的 包裹 归还,表示您知道请求已被驳回。但是我们是否立即切断连接(发送 FIN包)取决于是否还有数据发送给客户端,若有,在发送 FIN包之前,他们都处于这个状态。
- FIN_WAIT_2:这是一个半连接状态,其中一方请求关闭连接并等待另一方关闭。 客户端接收服务器的ACK包,但不会立即接收服务端的 FIN包并输入 FIN_WAIT_2状态。
- LAST_ACK:服务器启动最后的Fin包,等待最后的客户端ACK响应,并输入这个状态。
- TIME_WAIT:客户端接收端口的 FIN包,并立即发送ACK包最后确认,然后一个2MSL时间称为 TIME_WAIT状态。
5.解释 FIN_WAIT_2、CLOSE_WAIT和 TIME_WAIT状态?
- FIN_WAIT_2:
- 半关闭状态。
- 一方面,发送器具有接收数据的能力,但不再具有传输数据的能力。
- CLOSE_WAIT状态:
- 被关闭的连接接收了一个FI包,它立即响应一个ACK包,表明请求已经收到。
- 如果仍需发送剩余数据,则连接被动关闭将进入CLOSED_WAIT状态。
- TIME_WAIT状态
- 又称2MSL等待状态。
- 如果客户端直接进入CLOSED状态,如果服务未收到最后的ACK包,过时后将重新发售货款,此时,因为客户已关闭,因此服务端不会收到ACK,而是收到RST。因此,Time_WAIT状态的目的是防止最后的握手数据到达另一个人,并触发继电器准备好。
- 在2MSL中,不能再使用相同的插座,否则数据可以与旧连接混合(如果新连接与旧连接的插座相同)。
解释RTO、RTT和加班转播?
- 随时间推移的重发:发送结束如果在发送后没有及时确认消息,则该消息需要重发。
- 发送的数据无法到达接收者,所以另一方没有回应。
- 接收器接收数据,但ACK消息在返回过程中丢失。
- 接收者拒绝或丢弃数据。
- RTO:从前一次发送数据之间的时间,因为ACK响应没有被收到很久,到下一次,是再传输的间隔。
- 每个再传输RTO通常是前一次再传输的两倍的间隔,测量单位通常是RTT。 例如: 1RTT, 2RTT, 4RTT, 8RTT..
- 再传输号在达到限度后停止.
- RTT: 发送和接收数据和对方的响应之间的时间间隔,即发送数据和对方的响应之间的时间间隔,即发送数据和对方的响应之间的时间间隔,即发送数据和对方的响应之间的时间间隔。
- 目的是通过TCP头窗栏向接收机提供接收机能接收的最大数据量,以解决由于传输速度过高而接收机无法接收的问题。
- TCP是一个双向协议,双方可以同时通信,因此发送者和接收者保持一个发送者和接收者窗口。
- 发送窗口:为了限制发送者发送的数据大小,发送窗口的大小由接收者返回的TCP消息字段中的窗口字段控制,通过该字段接收者通知发送者自己的缓冲大小(由系统、硬件等限制)。
- 接收窗口:用于标记接收数据的大小。
- TCP是流数据,输出数据流可以分为以下四个部分: 发送和确认部件 | 发送未确认部件 | 不发送但可传送部件 | 不传送部件,发送窗口=已发送的未确认部分+未发送但可以发送的部分。收到的数据流可以分为: 收到 | 未收到,但已收到 | 未收到 未收到。接收窗口=未接收但已准备好接收部分。
- 发送窗口的数据只有在发送数据的ACK响应被接收到接收端时移动,而左边连接到刚刚确认的数据。接收窗口也只有在接收数据时移动,并且持续在最左边。
7、拥塞控制原理
- 拥塞控制的目的在于防止网络资源(路由器、开关等)因网络过载而造成数据过载。 由于拥塞控制涉及整个网络链,它属于整个控制。
- TCP拥堵控制算法:
- 慢开始 & 拥塞避免:先试探⽹络拥塞程度再逐渐增⼤拥塞窗⼝。每次收到确认,交通堵塞窗口就会翻倍,直到阀门重新打开,这个过程的开始很慢。一旦达到阀门值,增加堵塞窗口的大小,每单位增加1MSS,有交通堵塞(没有确认的加班),将阀门值降低到原来值的一半,继续执⾏线性增加,这个过程避免了拥挤.
- 最后, 拥挤窗口收敛到一个稳定值.
6.如何区分流量控制和拥挤控制?
- 交通控制是沟通双方的协商问题;交通拥堵控制是通信链质量问题。
- 交通控制需要双方之间的通信,以维持一个发送窗口和一个接收窗口,对任意⼀⽅,接收窗口的大小由它自己决定,传输窗口的大小由接收机响应的TCP消息字段中的窗口值决定;拥挤控制拥挤窗口的大小的变化由检测模式发送一定数量数据后检测网络状态来调整。
- 实际的最后发送窗口 = min{流控发送窗口,拥挤窗口}。
TCP如何提供可靠的数据传输?
- 建立连接(标记): 在通信之前确认通信实体的存在。
- 序列机制(序列、确认编号):确保数据的序列和完全到达。
- 数据校正(和校正): CRC检查所有数据。
- 超时再传输: 确保由于无法到达链接,数据可以再传输多个次。
- 窗口机制(window): 提供流量控制以避免过多的传输.
- 拥塞控制:同上。
8, TCP接口交互过程?
- 服务器:
- 创建socket->int socket(int domain,int type,int protocol);
- 域:确定索克的地址类型的协议域,IPv4是AF_INET。
- 类型:指定接口类型,SOCKET_STREAM为TCP连接。
- IPPROTO_TCP代表TCP协议,自动选择0的默认类型协议。
- 绑定socket和端⼝号 -> int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
- sockfd:索克返回一个索克描述,类似于文件描述fd。
- addr:具有 sockaddr类型的数据指针,指向绑定结构变量。
- Addrlen:地址长度。
- 监听端⼝号 -> int listen(int sockfd, int backlog);
- sockfd Sock描述一个要听的词。
- backlog:索克可以排队的最大连接数。
- 接收⽤户请求 -> int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
- 索克:服务器索克描述一个单词。
- Addr:指向地址结构。
- Addrlen:协议地址长度。
- 注:一旦一个客户端请求被成功接受,将返回一个新的描述符来识别特定客户端的TCP连接。
- 从socket中读取字符->ssize_t read(int fd, void *buf, size_t count);
- fd:连接描述字。
- 缓冲区缓冲区。
- 缓冲区的长度。
- 注:大于0表示读取字节的数目,返回0表示读取文件的结尾,小于0表示发生错误。
- 关闭socket -> int close(int fd);
- fd: accept 返回连接描述单词,每个连接都有一个,并且生命周期是连接周期。
- 注:索克是监视描述词,仅使用一个服务器来监测是否存在连接;fd是连接描述词,用于每个连接操作。
- 客户机:
- 创建socket -> int socket(int domain,int type,int protocol);
- 连接指定计算机 -> int connect(int sockfd, struct sockaddr* addr,socklen_t addrlen);
- sockfd客户端的袜子描述单词。
- Addr:服务器的地址。
- Addrlen:索克地址长度。
- 向socket写入信息 -> ssize_t write(int fd,const void *buf,size_t count);
- Fd, buf, count:意思是相同的读法。
- 大于0表示已写的部分或所有数据,小于0表示错误。
- 关闭oscket -> int close(int fd);
-fd:同一个服务器fd
本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/27485.html。