OSI/TCP-IP/三次握手,四次挥手
OSI七层参考模型:
物理层:通信信道上原始比特流的传输,
协议:RJ45、CLOCK、IEEE802.3。
-比特:Bit。
数据链路层:将原始传输设备上没有被发现的错误呈现给物理层。
协议:PPP、FR、HDLC、VLAN、MAC。
-帧:Frame。
网络层:负责控制整个子网的运转,路由功能:将一个包从源端路由发送到目标端。
协议:IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP。
-包:Packet。
传输层:将上一层传下来的数据拆分成更小的单元传给网络层,最终保证网络另一端的计算机的传输层 能够正确接收数据。
协议:TCP、UDP、SPX。
-段:Segment。
会话层:建立、管理和终止表示层实体之间的通信会话,该层的通信由不同设备中的应用程序之间的服 务请求和响应组成。
协议:NFS、SQL、NETBIOS、RPC。
-会话协议数据单元:SPDU。
表示层:对数据进行翻译、加密和压缩,表示层提供各种用于应用层数据的编码和转换功能,确保一个 系统的应用层发送的数据能被另一个系统的应用层识别。
协议:JPEG、MPEG、ASII。
-表示协议数据单元:PPDU。
应用层:为计算机用户应用程序提供服务接口,离用户最近的一层,为用户直接提供各种网络服务。
协议:FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS。
-应用协议数据单元:APDU。
TCP/IP五层参考模型:
应用层:用户调用应用层软件来访问TCP/IP互联网提供的服务,应用层软件利用传输层接口发送和接收数据,协议:FTP、SMTP。
传输层:提供端到端的通信服务,协议:TCP、UDP。
网络层:负责为数据报从一台主机传输到另一台主机选路,通过路由器在源和目的之间发送分组,协议:IP/IPv4、IPv6。
网络接入层/物理层:将帧中的单个比特从一个节点移动到下一个节点,该层协议仍然与链路的实际传输媒体相关,将分组从一个节点移动到路由上的下一个节点,必须依靠链路层。
网络接入层/数据链路层:从一个网络单元向临近的网络单元移动整个帧。
OSI七层参考模型与TCP/IP五层参考模型比较:
TCP/IP参考模型没有会话层和表示层,两者都以协议栈的概念为基础,并且协议栈中的协议相互独立,且两个模型中的各个层次的功能也大体相似,在两个模型中,传输层以及以上的各层都为进行通信的进程提供端到端,与网络无关的传输服务,各层形成了传输提供方。传输层之上的各层都是传输服务的用户,面向应用的用户。
TCP/IP对面向连接服务和无连接服务并重,而OSI最初只是强调面向连接服务。
OSI参考模型是学术上和法律上的国际标准,是完整的权威的网络参考模型。
而TCP/IP参考模型是事实上的国际标准,即现实生活中被广泛使用的网络参考模型。
OSI参考模型与TCP/IP参考模型都不完美,但TCP/IP参考模型发展是因为在ISO制定OSI参考模型过程中总是着眼于一次制定达到完美,所以的制定过程中考虑的方面比较多,但去忽略了IP这一协议的重要性,但当ISO认识到时只好在网络层划出一个子层来完成类似的功能,在无连接服务一开始也不在考虑之列,还有就是网络管理功能的过度复杂等,造成了OSI迟迟没有成熟的产品推出的成因,进而影响了厂商对它的支持,而这时的TCP/IP通过实践得到到不断的完善,也得到了大厂商的支持,所以TCP/IP参考模型得到了发展。
协议描述/只说大家都熟悉的协议:
TCP:传输控制协议。
UDP: 用户数据报协议。
FTP:文件传输协议。
(3)可靠通信方式;
(4)在网络状况不佳的时候尽量降低系统由于重传带来的带宽开销;
(5)通信连接维护是面向通信的两个端点的,而不考虑中间网段和节点。
TCP与UDP的区别?
TCP | UDP | |
---|---|---|
连接 | 面向连接 | 面向无连接,发送数据之前不需要建立连接 |
可靠性 | 可靠,无差错,不丢失,不重复,按序到达 | 尽最大努力交付,即不保证可靠交付 |
模式 | 流模式(字节流) | 数据报模式(报文) |
连接方式 | 点到点 | 支持一对一,一对多,多对一和多对多的交互通信 |
首部开销 | 20字节 | 8个字节 |
逻辑通信信道 | 全双工的可靠信道 | 不可靠信道 |
速度 | 慢 | 快 |
对系统资源要求 | 较多 | 较少 |
UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。
为什么UDP有时比TCP更有优势?
网速的提升给UDP的稳定性提供可靠网络保障,丢包率很低,如果使用应用层重传,能够确保传输的可靠性。TCP为了实现网络通信的可靠性,使用了复杂的拥塞控制算法,建立了繁琐的握手过程,由于TCP内置的系统协议栈中,极难对其进行改进。采用TCP,一旦发生丢包,TCP会将后续的包缓存起来,等前面的包重传并接收到后再继续发送,延时会越来越大,基于UDP对实时性要求较为严格的情况下,采用自定义重传机制,能够把丢包产生的延迟降到最低,尽量减少网络问题对游戏性造成影响。
TCP的三次握手,四次挥手:
三次握手:(我要和你建立链接,你真的要和我建立链接么,我真的要和你建立链接,成功)
- 第一次握手:客户端发送syn包(syn=x)到服务器,并进入SYN_SEND状态,等待服务器确认;
- 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;
- 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。
四次挥手:(我要和你断开链接;好的,断吧。我也要和你断开链接;好的,断吧):
- 第一次挥手:客户端主动关闭方发送一个FIN,用来关闭客户端到服务端的数据传送,也就是客户端告诉服务端:我已经不会再给你发数据了(当然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,客户端依然会重发这些数据),但是,此时客户端还可以接受数据。
- 第二次挥手:服务端收到FIN包后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)。
- 第三次挥手:服务端发送一个FIN,用来关闭服务端到客户端的数据传送,也就是告诉客户端,我的数据也发送完了,不会再给你发数据了。
- 第四次挥手:客户端收到FIN后,发送一个ACK给服务端,确认序号为收到序号+1,至此,完成四次挥手。
第3次握手失败会怎么办?
第三次失败,只有客户端处于成功状态(因为第2次服务器返回了ACK),服务器端没有接收到客户端的 ACK。
这要分几种情况讨论:
-
In other words, if the ACK is dropped but the next packet is not dropped, then everything is fine. 也就是说客户端发出的 ACK 丢失了,发出的 下一个数据包 没有丢失,则服务端接收到下一个数据包(这个数据包里也会带上 ACK 信息),能够进入正常的 ESTABLISHED 状态
-
如果服务端和客户端都没有数据发送,或者服务端想发送数据(但是发不了,因为没有收到客户端的 ACK),服务器都会有定时器发送第二步SYN+ACK数据包,如果客户端再次发送ACK成功,建立连接。
-
如果一直不成功,服务器肯定会有超时设置,超时之后会给客户端发RTS报文,进入CLOSED状态,防止SYN洪泛攻击。
为什么TCP链接需要三次握手,两次不可以么,为什么?
为了防止已失效的链接请求报文突然又传送到了服务端,因而产生错误。
客户端发出的连接请求报文并未丢失,而是在某个网络节点长时间滞留了,以致延误到链接释放以后的某个时间才到达Server。这是,Server误以为这是Client发出的一个新的链接请求,于是就向客户端发送确认数据包,同意建立链接。若不采用“三次握手”,那么只要Server发出确认数据包,新的链接就建立了。由于client此时并未发出建立链接的请求,所以其不会理睬Server的确认,也不与Server通信;而这时Server一直在等待Client的请求,这样Server就白白浪费了一定的资源。若采用“三次握手”,在这种情况下,由于Server端没有收到来自客户端的确认,则就会知道Client并没有要求建立请求,就不会建立链接。
为什么连接的时候是三次握手,关闭的时候却是四次握手?
TCP是全双工模式,关闭连接时,当主机B收到主机A的FIN报文时,仅仅表示主机 A不再发送数据了但是还能接收数据。此时,主机B也未必全部数据都发送给A了,所以B可以立即close;也可以发送一些数据给A后,再发送FIN报文给对方来表示同意现在关闭连接,因此,主机BACK和FIN一般都会分开发送。
IP/IPv4、IPv6:
IPv4:互联网通信协议第4版,地址长度:32位(4 个字节),地址数量:232(约4×109)。
IPv6:互联网通信协议第6版,地址长度:128位(16 个字节),地址数量:2128(约3.4×1038)。
上一篇: 如何删除win10系统锁定的文件
下一篇: TCP/IP协议三次握手与四次挥手