• 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报文,因此不能一起发送。故需要四步握手。

  • 相关阅读:
    input 去除边框
    分页封装
    python后端继承序列化,不同访问形式返回不同结果
    解决vue前端不显示自定义字段
    Vue 获取后端多对多关联表信息
    vue 前段增删改查代码规范
    前段增删改查的应用
    ant-design-vue基础
    python 后端 数据库的创表及增删改查 简单使用
    配置Uwsgi+Nginx+Django+Vue
  • 原文地址:https://www.cnblogs.com/uakora/p/14652553.html
Copyright © 2020-2023  润新知