• TCP/IP详解


    TCP/IP 

    2012-07-19 22:13:40|  分类: 网络基础知识 |  标签:网络基础  |字号订阅

     
     

     

     

        

    端口的概念:1-1023是系统分配的端口,应用程序不可用。常见的端口有

    • 20:FTP数据连接
    • 21:FTP控制连接
    • 23:Telnet
    • 25:SMTP
    • 80:HTTP

    TCP连接三次握手:

    第一次握手:客户端TCP首先给服务器端TCP发送一个特殊的TCP数据

    段。该数据段不包含应用层数据,并将头部中的SYN位设置为1,所以该数

    据段被称为SYN数据段。另外,客户选择一个初始序列号SEQ,设SEQ=x

    并将这个编号放到初始的TCP SYN数据段的序列号字段中。该数据段被封

    装到一个IP数据报中,并发送给服务器。

    第二次握手:一旦装有TCP SYN数据段的IP数据报到达了服务器主机,服

    务器将从该数据报中提取出TCP SYN数据段,给该连接分配TCP缓冲区和

    变量,并给客户TCP发送一个允许连接的数据段。这个允许连接的数据段

    也不包含任何应用层数据。但是,它的头部中装载着3个重要信息。首先,

    SYN被设置为1;其次,TCP数据段头部的确认字段被设置为x+1;最后,

    服务器选择自己的初始顺序号,SEQ=y,并将该值放到TCP数据段头部的

    序列号字段中。

    第三次握手:在接收到允许连接数据段之后,客户也会给连接分配缓冲区

    和变量。客户端主机还会给服务器发送另一个数据段,对服务器的允许连

    接数据段给出确认。

     

     

    整个过程如图所示:

     

    概念:

    未连接队列:在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包(syn=j)开设一个条目,该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户的确认包。这些条目所标识的连接在服务器处于 Syn_RECV状态,当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。

    Backlog参数:表示未连接队列的最大容纳数目。SYN-ACK重传次数服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,如果重传次数超过系统规定的最大重传次数,系统将该连接信息从半连接队列中删除。注意,每次重传等待的时间不一定相同。

    半连接存活时间:是指半连接队列的条目存活的最长时间,也即服务从收到SYN包到确认这个报文无效的最长时间,该时间值是所有重传请求包的最长等待时间总和。有时我们也称半连接存活时间为Timeout时间、SYN_RECV存活时间。

     

     

     

     

     

     

     

     

     

    TCP释放连接

    第一次挥手:由进行数据通信的任意一方提出要求释放连接的请求报文段。

    第二次挥手:接收端收到此请求后,会发送确认报文段,同时当接收端的所有数据也都已经发送完毕后,接收端会向发送端发送一个带有其自己序号的报文段。

    第三次挥手:发送端收到接收端的要求释放连接的报文段后,发送反向确认。

        TCP数据报文格式:

    • 源端口和目的端口字段——各占 2 字节。标识了发送方和接收方的应用进程。
    • 序号字段——占 4 字节。TCP 连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。
    • 确认号字段——占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。
    • 数据偏移——占 4 bit,它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。
    • 保留字段——占 6 bit,保留为今后使用,但目前应置为 0。
    • 紧急比特 URG —— 当 URG = 1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。
    • 确认比特 ACK —— 只有当 ACK = 1 时确认号字段才有效。当 ACK = 0 时,确认号无效。
    • 推送比特 PSH (PuSH) —— 接收 TCP 收到推送比特置 1 的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付。
    • 复位比特 RST (ReSeT) —— 当 RST = 1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,通知一下对方。
    • 同步比特 SYN —— 同步比特 SYN 置为 1,就表示这是一个连接请求或连接接受报文。
    • 终止比特 FIN (FINal) —— 用来释放一个连接。当FIN = 1 时,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。
    • 窗口字段 —— 占 2 字节。窗口字段用来控制对方发送的数据量,单位为字节。TCP 连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限。
    • 检验和 —— 占 2 字节。检验和字段检验的范围包括首部和数据和伪段头(不是TCP里的信息,但是计算校验和的时候也计算了的内容:IP地址,TCP数据段长度,协议类型)。
    • 紧急指针字段 —— 占 16 bit。紧急指针指出在本报文段中的紧急数据的位置。
    • 选项字段 —— 长度可变。TCP 规定了二种选项,最大报文段长度 MSS (Maximum Segment Size)。MSS 告诉对方 TCP:"我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节。" 和窗口扩大因子,用于扩大接收方窗口。MSS 是 TCP 报文段中的数据字段的最大长度。数据字段加上 TCP 首部才等于整个的 TCP 报文段。
    • 填充字段 —— 这是为了使整个首部长度是 4 字节的整数倍。
  • 相关阅读:
    元组-琢磨已久的购物车程序
    学习使我充实自己-列表具备的功能
    很高兴今天用PYTHON3写了三级菜单程序!
    python内建模块shlex将普通字符串编码成符合linux shell的字符串
    HTTPS能登陆,HTTP不行
    linux shell判断输入的是哪个不可见字符,例如^X(Ctrl-X)
    TI CC3200做ETSI EN 300 328 认证
    使用systemd-resolved的系统中DNS来源优先级
    systmed-timesyncd中NTP服务器地址来源优先级
    markdown的简单应用实例
  • 原文地址:https://www.cnblogs.com/siguoya/p/3512021.html
Copyright © 2020-2023  润新知