• http curl访问的tcp数据包分析


    http curl访问的tcp数据包分析

    可能每次抓包效果都不尽相同。
    参考1
    参考2

    14:46:43.462029 IP (tos 0x0, ttl 64, id 26825, offset 0, flags [DF], proto TCP (6), length 60)
        10.1.16.122.43966 > 180.101.49.12.http: Flags [S], cksum 0xbc2f (correct), seq 3150689946, win 64202, options [mss 1366,sackOK,TS val 2121004026 ecr 0,nop,wscale 7], length 0
    14:46:43.501713 IP (tos 0x0, ttl 48, id 26825, offset 0, flags [DF], proto TCP (6), length 60)
        180.101.49.12.http > 10.1.16.122.43966: Flags [S.], cksum 0x5f15 (correct), seq 2285380873, ack 3150689947, win 8192, options [mss 1366,sackOK,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,wscale 5], length 0
    14:46:43.501769 IP (tos 0x0, ttl 64, id 26826, offset 0, flags [DF], proto TCP (6), length 40)
        10.1.16.122.43966 > 180.101.49.12.http: Flags [.], cksum 0xe19d (correct), seq 1, ack 1, win 502, length 0
    14:46:43.501917 IP (tos 0x0, ttl 64, id 26827, offset 0, flags [DF], proto TCP (6), length 117)
        10.1.16.122.43966 > 180.101.49.12.http: Flags [P.], cksum 0xac52 (correct), seq 1:78, ack 1, win 502, length 77: HTTP, length: 77
            GET / HTTP/1.1
            Host: www.baidu.com
            User-Agent: curl/7.68.0
            Accept: */*
    
    14:46:43.537630 IP (tos 0x0, ttl 40, id 55557, offset 0, flags [DF], proto TCP (6), length 40)
        180.101.49.12.http > 10.1.16.122.43966: Flags [.], cksum 0xdfba (correct), seq 1, ack 78, win 908, length 0
    14:46:43.537680 IP (tos 0x0, ttl 40, id 55556, offset 0, flags [DF], proto TCP (6), length 40)
        180.101.49.12.http > 10.1.16.122.43966: Flags [.], cksum 0xdfba (correct), seq 1, ack 78, win 908, length 0
    14:46:43.538789 IP (tos 0x0, ttl 40, id 55558, offset 0, flags [DF], proto TCP (6), length 1400)
        180.101.49.12.http > 10.1.16.122.43966: Flags [.], cksum 0x1b6d (correct), seq 1:1361, ack 78, win 908, length 1360: HTTP, length: 1360
            HTTP/1.1 200 OK
            Accept-Ranges: bytes
            Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
            Connection: keep-alive
            Content-Length: 2381
            Content-Type: text/html
            Date: Wed, 20 Jul 2022 06:46:43 GMT
            Etag: "588604c8-94d"
            Last-Modified: Mon, 23 Jan 2017 13:27:36 GMT
            Pragma: no-cache
            Server: bfe/1.0.8.18
            Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
    
            <!DOCTYPE html>
    14:46:43.538820 IP (tos 0x0, ttl 64, id 26828, offset 0, flags [DF], proto TCP (6), length 40)
        10.1.16.122.43966 > 180.101.49.12.http: Flags [.], cksum 0xdc00 (correct), seq 78, ack 1361, win 502, length 0
    14:46:43.576365 IP (tos 0x0, ttl 40, id 55562, offset 0, flags [DF], proto TCP (6), length 40)
        180.101.49.12.http > 10.1.16.122.43966: Flags [.], cksum 0xd4dc (correct), seq 2782, ack 79, win 908, length 0
    14:46:43.576425 IP (tos 0x0, ttl 40, id 55563, offset 0, flags [DF], proto TCP (6), length 40)
        180.101.49.12.http > 10.1.16.122.43966: Flags [F.], cksum 0xd4db (correct), seq 2782, ack 79, win 908, length 0
    14:46:43.576452 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 40)
        10.1.16.122.43966 > 180.101.49.12.http: Flags [.], cksum 0xd671 (correct), seq 79, ack 2783, win 502, length 0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    1、在建立连接之前,http服务器创建TCB(传输控制块),准备接受客户进程的连接请求,处于LISTEN(监听)状态
    2、curl首先创建TCB,然后向http服务器发出连接请求,SYN置1,同时选择初始序号seq=3150689946,进入SYN-SEND(同步已发送)状态
    3、http服务器收到连接请求后向curl发送确认,SYN置1,ACK置1,同时产生一个确认序号ack=3150689947。同时随机选择初始序号seq=2285380873,进入SYN-RCVD(同步收到)状态
    4、curl收到确认连接请求后,ACK置1,确认号ack=1,seq=1,进入到ESTABLISHED(已建立连接)状态。向http服务器发出确认连接,最后http服务器也进入到ESTABLISHED(已建立连接)状态。
    5、curl向http服务器发送请求PUSH置1,ACK置1,seq 1:78, ack 1,数据长度78
    6、服务器两次回包确认,ACK置1,seq 1, ack 78 (此处应该是网络影响)
    7、服务器再次回包,ACK置1,seq 1:1361, ack 78,数据长度1360
    8、curl向http服务器回包,ACK置1,seq 78, ack 1361
    9、http服务器向curl发包,ACK置1,seq 2782, ack 79
    10、http服务器向curl发包,FINISH置1,ACK置1,seq 2782, ack 79
    11、curl向http服务器回包,ACK置1,seq 79, ack 2783

    附:其他curl一次抓包结果

    15:28:45.577771 IP (tos 0x0, ttl 64, id 32204, offset 0, flags [DF], proto TCP (6), length 60)
        172.27.35.3.33198 > 172.27.35.1.http: Flags [S], cksum 0x62f0 (correct), seq 3211320081, win 64240, options [mss 1460,sackOK,TS val 1085402809 ecr 0,nop,wscale 7], length 0
    15:28:45.578861 IP (tos 0x0, ttl 128, id 47347, offset 0, flags [DF], proto TCP (6), length 52)
        172.27.35.1.http > 172.27.35.3.33198: Flags [S.], cksum 0x8441 (correct), seq 2015148013, ack 3211320082, win 65535, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
    15:28:45.578908 IP (tos 0x0, ttl 64, id 32205, offset 0, flags [DF], proto TCP (6), length 40)
        172.27.35.3.33198 > 172.27.35.1.http: Flags [.], cksum 0xc31e (correct), ack 1, win 502, length 0
    15:28:45.578999 IP (tos 0x0, ttl 64, id 32206, offset 0, flags [DF], proto TCP (6), length 115)
        172.27.35.3.33198 > 172.27.35.1.http: Flags [P.], cksum 0x63e1 (correct), seq 1:76, ack 1, win 502, length 75: HTTP, length: 75
            GET / HTTP/1.1
            Host: 172.27.35.1
            User-Agent: curl/7.68.0
            Accept: */*
    
    15:28:45.581692 IP (tos 0x0, ttl 128, id 47349, offset 0, flags [DF], proto TCP (6), length 57)
        172.27.35.1.http > 172.27.35.3.33198: Flags [P.], cksum 0x02ec (correct), seq 1:18, ack 76, win 512, length 17: HTTP, length: 17
            HTTP/1.0 200 OK
    15:28:45.581726 IP (tos 0x0, ttl 64, id 32207, offset 0, flags [DF], proto TCP (6), length 40)
        172.27.35.3.33198 > 172.27.35.1.http: Flags [.], cksum 0xc2c2 (correct), ack 18, win 502, length 0
    15:28:45.581754 IP (tos 0x0, ttl 128, id 47350, offset 0, flags [DF], proto TCP (6), length 355)
        172.27.35.1.http > 172.27.35.3.33198: Flags [FP.], cksum 0xef0d (correct), seq 18:333, ack 76, win 512, length 315: HTTP
    15:28:45.581873 IP (tos 0x0, ttl 64, id 32208, offset 0, flags [DF], proto TCP (6), length 40)
        172.27.35.3.33198 > 172.27.35.1.http: Flags [F.], cksum 0xc186 (correct), seq 76, ack 334, win 501, length 0
    15:28:45.586416 IP (tos 0x0, ttl 128, id 47351, offset 0, flags [DF], proto TCP (6), length 40)
        172.27.35.1.http > 172.27.35.3.33198: Flags [.], cksum 0xc17b (correct), ack 77, win 512, length 0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    关于数据标志位

    参考
    TCP报文中共有6个标志位。

    URG:紧急标志位

    ACK:确认标志位

    PSH:推送标志位

    RST:复位标志位

    SYN:同步标志位

    FIN:结束标志位

    URG :紧急标志位,它使一端可以告诉另一端有些具有某种方式的“紧急数据”已经放置在普通的数据流中。另一端被通知这个紧急数据已经放置在普通数据流中,由接收方决定如何处理。

    当URG=1时表明紧急指针字段有效,即告诉系统此报文段中有紧急数据,应尽快传送,而不要按原来的排队顺序来传送,发送方的TCP就把紧急数据放到本报文段数据的最前面。URG标志位要与首部中的紧急指针字段配合使用,紧急指针指向数据段中的某个字节(数据从第一个字节到指针所指的字节就是紧急数据)。需要注意的是,即使窗口为0时也可以发送紧急数据,此时紧急数据不进入接收缓冲区直接交给上层进程。

    PSH :推送标志位,当两个应用进程进行交互式的通信时,有时在一端的应用进程希望在键入一个命令时立即收到对方的响应。这时,发送方TCP将PSH标志位置1,立即创建一个报文段发送出去,接收方TCP收到PSH位为1的报文,会尽快的交付给应用层,而不是等到缓存填满后交付。

    PSH标志是为了提示接收端的应用程序应该立即从TCP的接收缓冲区中拿走数据。

    两相对比

    (1)URG交付给进程的数据只有紧急数据

    PSH交付给进程的数据是缓冲区排好序的数据以及当前报文中的数据

    (2)URG强调的是直接读取数据,不会将该数据复制到缓存中

    PSH强调的是尽快将数据交付给上层(协议),而不需要经过强迫数据交互。该部分数据是需要复制到缓存的,但不用等到缓冲区满才将数据交付给上层

    (3)URG是针对发送方

    PSH是针对接收方

    URG和PSH的共同点是,两者都是一种对数据的处理方式,只不过URG是处理在前端,而PSH是在处理的后端告诉内核,不用等待缓冲区满再交付。

  • 相关阅读:
    鸿蒙项目实战-月木学途:1.编写首页,包括搜索栏、轮播图、宫格
    JDBC SQL Server Source Connector: 一览与实践
    解决Java获取数据库日期数据问题:格式为【YYYY/MM/DD】,获取的格式却转换为【YYYY-MM-DD hh:mm:ss】
    【API封装接口的应用】大数据值得深思的十二个典型应用案例,和未来机遇畅想
    The user specified as a definer (‘platformadmin‘@‘%‘) does not exist.
    训练人工智能机器人的软实力
    R语言使用lm函数拟合线性回归模型:使用predict函数和训练好的模型进行预测推理、使用plot函数可视化线图对比预测值和实际值曲线
    KEIL仿真 logic analyzer
    网络安全(黑客)自学
    设计模式:命令模式
  • 原文地址:https://blog.csdn.net/Jailman/article/details/125892312