OSI
第1层 物理层(bit)
首先解决两台物理机之间的通信需求,具体就是机器A往机器B发送比特流,机器B能收到比特流。
物理层主要定义了物理设备的标准,如网线的类型,光纤的接口类型,各种传输介质的传输速率。主要作用是传输比特流(0101二进制数据),将比特流转化为电流强弱传输,到达目的后再转化为比特流,即常说的数模转化和模数转换。这层数据叫做比特。网卡工作在这层。
第2层 数据链路层(帧)
在传输比特流的过程中,会产生错传、数据传输不完整的可能。
数据链路层定义了如何格式化数据进行传输,以及如何控制对物理介质的访问。通常提供错误检测和纠正,以确保数据传输的准确性。本层将比特数据组成帧,交换机工作在这层,对帧解码,并根据帧中包含的信息把数据发送到正确的接收方。
第3层 网络层(包)
随着网络节点的不断增加,点对点通讯需要通过多个节点,如何找到目标节点,如何选择最佳路径成为首要需求。
网络层主要功能是将网络地址转化为对应的物理地址,并决定如何将数据从发送方路由到接收方。网络层通过综合考虑发送优先权、网络拥塞程度、服务质量以及可选路由的花费来决定从一个网络中节点A到另一个网络中节点B的最佳路径。由于网络层处理并智能指导数据传送,路由器连接网络隔断,所以路由器属于网络层。此层的数据称之为数据包。本层需要关注的协议TCP/IP协议中的IP协议。
第4层 传输层
随着网络通信需求的进一步扩大,通信过程中需要发送大量的数据,如海量文件传输,可能需要很长时间,网络在通信的过程中会中断很多次,此时为了保证传输大量文件时的准确性,需要对发送出去的数据进行切分,切割为一个一个的段落(Segement)发送,其中一个段落丢失是否重传,段落是否按顺序到达,是传输层需要考虑的问题。
传输层解决了主机间的数据传输,数据间的传输可以是不同网络,并且传输层解决了传输质量的问题。传输协议同时进行流量控制,或是基于接收方可接收数据的快慢程度规定适当的发送速率。除此之外,传输层按照网络可处理的最大尺寸将较长的数据包进行强制分割,例如以太网无法接收大于1500字节的数据包,发送方节点的传输层将数据分割成较小的数据片并编号,以便数据到达接收方节点的传输层时能以正确的顺序重组,该过程称为排序。传输层需要关注的协议有TCP/IP协议中的TCP协议和UDP协议。
第5层 会话层
自动收发包,自动寻址。
会话层作用是建立和管理应用程序间的通信。
第6层 表示层
Linux给Windows发包,不同系统语法不一致,如exe不能在Linux下执行,shell不能在Windows不能直接运行。于是需要表示层。
解决不同系统之间通信语法问题,在表示层数据将按照网络能理解的方案进行格式化,格式化因所使用网络的不同而不同。
第7层 应用层
规定发送方和接收方必须使用一个固定长度的消息头,消息头必须使用某种固定的组成,消息头中必须记录消息体的长度等信息,方便接收方正确解析发送方发送的数据。应用层旨在更方便应用从网络中接收的数据,重点关注TCP/IP协议中的HTTP协议。
发送信息,层层加协议头。收方:层层去头!
| OSI七层网络模型 | TCP/IP四层概念模型 | 对应网络协议 |
|---|---|---|
| 应用层(Application) | 应用层 | HTTP、TFTP, FTP, NFS, WAIS、SMTP |
| 表示层(Presentation) | Telnet, Rlogin, SNMP, Gopher | |
| 会话层(Session) | SMTP, DNS | |
| 传输层(Transport) | 传输层 | TCP, UDP |
| 网络层(Network) | 网络层 | IP, ICMP, ARP, RARP, AKP, UUCP |
| 数据链路层(Data Link) | 数据链路层 | FDDI, Ethernet, Arpanet, PDN, SLIP, PPP |
| 物理层(Physical) | IEEE 802.1A, IEEE 802.2到IEEE 802.11 |
网络层:ICMP 、IP、路由器、防火墙
数据链路层:网卡、网桥、交换机
物理层:中继器、集线器
IP、TCP、UDP、HTTP等都属于TCP/IP协议,TCP/IP泛指这些协议。
OSI模型注重通信协议必要的功能;TCP/IP更强调在计算机上实现协议应该开发哪种程序。
三次握手过程:
客户端——发送带有SYN标志的数据包——服务端 一次握手 Client进入syn_sent状态
服务端——发送带有SYN/ACK标志的数据包——客户端 二次握手 服务端进入syn_rcvd
客户端——发送带有ACK标志的数据包——服务端 三次握手 连接就进入Established状态
主要是为了建立可靠的通信信道,保证客户端与服务端同时具备发送、接收数据的能力
1、防止已失效的请求报文又传送到了服务端,建立了多余的链接,浪费资源
2、 两次握手只能保证单向连接是畅通的。(为了实现可靠数据传输, TCP 协议的通信双方, 都必须维 护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。 三次握手的过程即是通信双方 相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤;如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认)
四次挥手过程:
客户端——发送带有FIN标志的数据包——服务端,关闭与服务端的连接 ,客户端进入FIN-WAIT-1状态
服务端收到这个 FIN,它发回⼀ 个 ACK,确认序号为收到的序号加1,服务端就进入了CLOSE-WAIT状态
服务端——发送⼀个FIN数据包——客户端,关闭与客户端的连接,客户端就进入FIN-WAIT-2状态
客户端收到这个 FIN,发回 ACK 报⽂确认,并将确认序号设置为收到序号加1,TIME-WAIT状态
因为需要确保客户端与服务端的数据能够完成传输。
CLOSE-WAIT:
这种状态的含义其实是表示在等待关闭
TIME-WAIT:
为了解决网络的丢包和网络不稳定所带来的其他问题,确保连接方能在时间范围内,关闭自己的连接
netstat -an |grep TIME_WAIT|wc -l 查看连接数等待time_wait状态连接数
为什么会TIME-WAIT过多?解决方法是怎样的?
可能原因: 高并发短连接的TCP服务器上,当服务器处理完请求后立刻按照主动正常关闭连接
解决:负载均衡服务器;Web服务器首先关闭来自负载均衡服务器的连接
TCP与UDP区别及场景
| 类型 | 特点 | 性能 | 应用过场景 | 首部字节 |
|---|---|---|---|---|
| TCP | 面向连接、可靠、字节流 | 传输效率慢、所需资源多 | 文件、邮件传输 | 20-60 |
| UDP | 无连接、不可靠、数据报文段 | 传输效率快、所需资源少 | 语音、视频、直播 | 8个字节 |
基于TCP的协议:HTTP、FTP、SMTP
基于UDP的协议:RIP、DNS、SNMP
TCP滑动窗口,拥塞控制
TCP通过:应用数据分割、对数据包进行编号、校验和、流量控制、拥塞控制、超时重传等措施保证数据的可靠传输;
拥塞控制目的:为了防止过多的数据注入到网络中,避免网络中的路由器、链路过载
拥塞控制过程:TCP维护一个拥塞窗口,该窗口随着网络拥塞程度动态变化,通过慢开始、拥塞避免等算法减少网络拥塞的发生。