TCP/IP协议

TCP/IP 协议

TCP/IP 参考模型

应用层

OSI参考模型中的会话层、表示层和应用层的功能

传输层

让应用程序之间实现通信;通过端口号识别;代表性协议:TCP、UDP协议;

端口号识别;

实现端口之间的逻辑通信

网络层

在网络与网络相互连接的环境中,将数据从发送端主机发送到接收端主机。

IP地址识别;

实现IP地址间的逻辑通信

网络通信层(数据链路层)

网络层为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信。

主机 → 主机(网络层)

端口 → 端口(运输层)

网络层协议

IP协议

IP是跨域网络传送数据包,使整个互联网都能够收到数据的协议。

不具有重发机制,属于非可靠性传输协议。

ICMP

异常通知。

传输层协议

TCP协议

是一种面向有连接的传输层协议。它可以保证两端通信主机之间的通信可达。TCP能够正确处理在传输过程中丢包、传输顺序乱掉等异常情况。此外,TCP还能够有效利用带宽,解缓网络拥堵。

然而,为了建立与断开连接,有时它需要至少 7 次的发包收包,导致网络流量的浪费。此外,为了提高网络的利用率,TCP协议中定义了各种各样复杂的规范,因此不利于视频会议(音频、视频的数据量既定)等参合使用。

UDP协议

UDP(User Datagram Protocol)有别于TCP,它是一种面向无连接的传输协议。UDP不会关注对端是否真的收到了传送过去的数据,如果需要检查对端是否收到分组数据包,或者对端是否连接到网络,则需要在应用程序中实现。

UDP常用于分组数据较少或多播、广播通信以及视频通信等多媒体领域。

端口号如何确定

确定端口号的方法分为两种:

■ 标准既定端口号

■ 时序分配法

握手:即一次发包到接收的过程,可能从客户端发送到服务端,也可能从服务端发送到客户端。

三次握手

发送端首先发送一个带 SYN 标志的数据包给对方。

接收端收到后,回传一个带有 SYN/ACK 标志的数据包以示传达确认信息。

最后,发送端再回传一个带 ACK 标志的数据包,代表“握手”结束。

四次挥手

发送端首先发送一个带 FIN 标志的数据包给对方。

接收端收到后,先回传一个带有 ACK 标志的数据包,等接收端所有请求都处理完成,再回传一个带 FIN 标志的数据包。

最后,发送端再回传一个带 ACK 标志的数据包,代表“挥手”结束。

接收端收到 ACK 标志的数据包后,关闭连接;

发送端等待 2MSL 没收到接收端重发的数据包,关闭连接。

为什么TCP客户端最后还要发送一次确认呢?

一句话,主要防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误。

如果使用的是两次握手建立连接,假设有这样一种场景,客户端发送了第一个请求连接并且没有丢失,只是因为在网络结点中滞留的时间太长了,由于TCP的客户端迟迟没有收到确认报文,以为服务器没有收到,此时重新向服务器发送这条报文,此后客户端和服务器经过两次握手完成连接,传输数据,然后关闭连接。此时此前滞留的那一次请求连接,网络通畅了到达了服务器,这个报文本该是失效的,但是,两次握手的机制将会让客户端和服务器再次建立连接,这将导致不必要的错误和资源的浪费。

如果采用的是三次握手,就算是那一次失效的报文传送过来了,服务端接受到了那条失效报文并且回复了确认报文,但是客户端不会再次发出确认。由于服务器收不到确认,就知道客户端并没有请求连接。

为什么连接的时候是三次握手,关闭的时候却是四次握手?

因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,”你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

posted @ 2021-04-13 12:00  LucasLin  阅读(101)  评论(0编辑  收藏  举报