这里的东西是学习netty的时候,课程中讲到了网路基础了;以后可以看看现在不深入研究了;https://www.bilibili.com/video/BV11X4y1K7VZ?p=10 这是当时的视频地址;

    1. yum install tcpdump # 安装抓包工具
    2. tcpdump -nn -i enp0s3 port 80 # 开始抓包,抓的是请求中80端口的包
    3. tcpdump: verbose output suppressed, use -v or -vv for full protocol decode #这里是阻塞等待抓包
    4. #我们在别的窗口 执行 curl www.baidu.com
    5. listening on enp0s3, link-type EN10MB (Ethernet), capture size 262144 bytes
    6. # 这是抓到的从本机的随机端口访问 百度80端口的 握手包sync
    7. 18:38:01.665412 IP 192.168.8.105.46236 > 110.242.68.4.80: Flags [S], seq 1920641546, win 29200, options [mss 1460,sackOK,TS val 4294966160 ecr 0,nop,wscale 7], length 0
    8. # 这是百度返回的握手包sync 和 确认包ack
    9. 18:38:01.683458 IP 110.242.68.4.80 > 192.168.8.105.46236: Flags [S.], seq 4203796566, ack 1920641547, win 8192, options [mss 1420,sackOK,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,wscale 5], length 0
    10. # 这是本机返给百度的 确认包 ack
    11. 18:38:01.683503 IP 192.168.8.105.46236 > 110.242.68.4.80: Flags [.], ack 1, win 229, length 0
    12. ##三次握手完成,建立链接
    13. # curl 请求主页; 建立链接之后就发了一个 77长度的请求包; P代表本机高速百度服务器,我发送的信息完毕了,快去处理;
    14. 18:38:01.683758 IP 192.168.8.105.46236 > 110.242.68.4.80: Flags [P.], seq 1:78, ack 1, win 229, length 77: HTTP: GET / HTTP/1.1
    15. # 百度回了一个ack包 表示:好的我收到你的包了;
    16. 18:38:01.704107 IP 110.242.68.4.80 > 192.168.8.105.46236: Flags [.], ack 78, win 908, length 0
    17. # 百度将请求的东西处理完了,并返回了一个 2781长度的数据包跟本地
    18. # 有时候返回的信息很长,一个数据包装不下,他就会返回两次的;到时候将多个数据包拼起来才是完整的信息 最有一条消息上有 P的标识,表示消息发完了,赶紧处理
    19. 18:38:01.705250 IP 110.242.68.4.80 > 192.168.8.105.46236: Flags [P.], seq 1:2782, ack 78, win 908, length 2781: HTTP: HTTP/1.1 200 OK
    20. # 本地告诉百度,你的数据包我收到了
    21. 18:38:01.705262 IP 192.168.8.105.46236 > 110.242.68.4.80: Flags [.], ack 2782, win 272, length 0
    22. # 请求处理完了, 返回数据
    23. # 本地 第一次分手的 fin包 F
    24. 18:38:01.705556 IP 192.168.8.105.46236 > 110.242.68.4.80: Flags [F.], seq 78, ack 2782, win 272, length 0
    25. # 百度 返回的确认收到了
    26. 18:38:01.715145 IP 110.242.68.4.80 > 192.168.8.105.46236: Flags [P.], seq 1421:2782, ack 78, win 908, length 1361: HTTP
    27. 18:38:01.715181 IP 192.168.8.105.46236 > 110.242.68.4.80: Flags [.], ack 2782, win 272, options [nop,nop,sack 1 {1421:2782}], length 0
    28. # 百度响应 本地发送第一次分手的结果 发送了一个ack回来 (第二次分手)
    29. 18:38:01.722514 IP 110.242.68.4.80 > 192.168.8.105.46236: Flags [.], ack 79, win 908, length 0
    30. # 紧跟着百度又给本地发了一个 我也想跟你分手的包 F 第三次分手
    31. 18:38:01.722548 IP 110.242.68.4.80 > 192.168.8.105.46236: Flags [F.], seq 2782, ack 79, win 908, length 0
    32. # 本地 对 百度想分手的相应 第四次分手
    33. 18:38:01.722563 IP 192.168.8.105.46236 > 110.242.68.4.80: Flags [.], ack 2783, win 272, length 0
    34. #真分了
    35. # 最后这部分是四次分手的包; 至此一个请求curl命令的所有数据传输才真正的结束;

    三次握手
    image.png
    四次分手
    image.png


    路由器内有个路由表
    交换机内有个 arp表;
    局域网像公网发消息,一定是在交换内查arp 找到 下一跳 的mac地址,然后将 数据包、目标地址、下一跳的mac地址(其实就是路由器的mac地址)发给吓一跳,然后 下一跳(路由器)在路由给别的机器

    验证这个过程的话,需要抓包

    tcpdump -nn -i etho(网卡名) port 80 or arp
    # 抓 etho网卡的包   抓的是目标端口等于80的tcp包   或者 arp的包
    
    arp -d 192.168.150.2 && curl www.baidu.com
    这里是先删除了arp表中的 192.168.150.2 的数据;然后里边请求百度链接
    
    
    这个时候看抓包的话,会看到三次握手之前会有一个arp的包的发送和返回;