zoukankan      html  css  js  c++  java
  • 【转】常见的tcp/ip协议的知识

    1.tcp/ip协议的层数

    左图是osi 7层模型,右图是tcp/ip 4层模型。二者对应关系如上。

    2、socket中TCP的三次握手建立连接详解

        我们知道tcp建立连接要进行“三次握手”,即交换三个分组。大致流程如下:

    • 客户端向服务器发送一个SYN J
    • 服务器向客户端响应一个SYN K,并对SYN J进行确认ACK J+1
    • 客户端再想服务器发一个确认ACK K+1

        只有就完了三次握手,但是这个三次握手发生在socket的那几个函数中呢?请看下图:

                                                image               

                                                                图1、socket中发送的TCP三次握手

        从图中可以看出,当客户端调用connect时,触发了连接请求,向服务器发送了SYN J包,这时connect进入阻塞状态;服务器监听到连接请求,即收到SYN J包,调用accept函数接收请求向客户端发送SYN K ,ACK J+1,这时accept进入阻塞状态;客户端收到服务器的SYN K ,ACK J+1之后,这时connect返回,并对SYN K进行确认;服务器收到ACK K+1时,accept返回,至此三次握手完毕,连接建立。

    总结:客户端的connect在三次握手的第二个次返回,而服务器端的accept在三次握手的第三次返回。

                                                

    3、socket中TCP的四次挥手释放连接详解

        上面介绍了socket中TCP的三次握手建立过程,及其涉及的socket函数。现在我们介绍socket中的四次握手释放连接的过程,请看下图:

                                                                   image

    图2、socket中发送的TCP四次握手

        图示过程如下:

    • 某个应用进程首先调用close主动关闭连接,这时TCP发送一个FIN M;
    • 另一端接收到FIN M之后,执行被动关闭,对这个FIN进行确认。它的接收也作为文件结束符传递给应用进程,因为FIN的接收意味着应用进程在相应的连接上再也接收不到额外数据;
    • 一段时间之后,接收到文件结束符的应用进程调用close关闭它的socket。这导致它的TCP也发送一个FIN N;
    • 接收到这个FIN的源发送端TCP对它进行确认。

        这样每个方向上都有一个FIN和ACK。

    附:

    一、TCP报文格式          这里写图片描述                                  图1 TCP报文格式

        上图中有几个字段需要重点介绍下:  (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。  (2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。  (3)标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:          (A)URG:紧急指针(urgent pointer)有效。          (B)ACK:确认序号有效。          (C)PSH:接收方应该尽快将这个报文交给应用层。          (D)RST:重置连接。          (E)SYN:发起一个新连接。          (F)FIN:释放一个连接。

        需要注意的是:      (A)不要将确认序号Ack与标志位中的ACK搞混了。      (B)确认方Ack=发起方Req+1,两端配对。

  • 相关阅读:
    HDU 2196 Computer
    HDU 1520 Anniversary party
    POJ 1217 FOUR QUARTERS
    POJ 2184 Cow Exhibition
    HDU 2639 Bone Collector II
    POJ 3181 Dollar Dayz
    POJ 1787 Charlie's Change
    POJ 2063 Investment
    HDU 1114 Piggy-Bank
    Lca hdu 2874 Connections between cities
  • 原文地址:https://www.cnblogs.com/zhangbing12304/p/10867531.html
Copyright © 2011-2022 走看看