欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

OSI/TCP-IP/三次握手,四次挥手

程序员文章站 2022-07-01 14:58:14
...
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。	

OSI/TCP-IP/三次握手,四次挥手
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,至此,完成四次挥手。

OSI/TCP-IP/三次握手,四次挥手
第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:
OSI/TCP-IP/三次握手,四次挥手

IPv4:互联网通信协议第4版,地址长度:32位(4 个字节),地址数量:232(约4×109)。

IPv6:互联网通信协议第6版,地址长度:128位(16 个字节),地址数量:2128(约3.4×1038)。