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

  • 相关阅读:
    严重: Parse error in application web.xml file at jndi:/localhost/ipws/WEBINF/web.xml java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml
    Failed to install .apk on device 'emulator5554': timeout解决方法
    java.lang.NoClassDefFoundError:org.jsoup.Jsoup
    Conversion to Dalvik format failed: Unable to execute dex:解决方法
    apache Digest: generating secret for digest authentication ...
    Description Resource Path Location Type Project has no default.properties file! Edit the project properties to set one.
    android service随机自启动
    MVC3 安装部署
    EF 4.3 CodeBased 数据迁移演练
    SQL Server 2008开启sa账户
  • 原文地址:https://www.cnblogs.com/uakora/p/14652553.html
Copyright © 2011-2022 走看看