这里的东西是学习netty的时候,课程中讲到了网路基础了;以后可以看看现在不深入研究了;https://www.bilibili.com/video/BV11X4y1K7VZ?p=10 这是当时的视频地址;
yum install tcpdump # 安装抓包工具
tcpdump -nn -i enp0s3 port 80 # 开始抓包,抓的是请求中80端口的包
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode #这里是阻塞等待抓包
#我们在别的窗口 执行 curl www.baidu.com
listening on enp0s3, link-type EN10MB (Ethernet), capture size 262144 bytes
# 这是抓到的从本机的随机端口访问 百度80端口的 握手包sync
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
# 这是百度返回的握手包sync 和 确认包ack
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
# 这是本机返给百度的 确认包 ack
18:38:01.683503 IP 192.168.8.105.46236 > 110.242.68.4.80: Flags [.], ack 1, win 229, length 0
##三次握手完成,建立链接
# curl 请求主页; 建立链接之后就发了一个 77长度的请求包; P代表本机高速百度服务器,我发送的信息完毕了,快去处理;
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
# 百度回了一个ack包 表示:好的我收到你的包了;
18:38:01.704107 IP 110.242.68.4.80 > 192.168.8.105.46236: Flags [.], ack 78, win 908, length 0
# 百度将请求的东西处理完了,并返回了一个 2781长度的数据包跟本地
# 有时候返回的信息很长,一个数据包装不下,他就会返回两次的;到时候将多个数据包拼起来才是完整的信息 最有一条消息上有 P的标识,表示消息发完了,赶紧处理
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
# 本地告诉百度,你的数据包我收到了
18:38:01.705262 IP 192.168.8.105.46236 > 110.242.68.4.80: Flags [.], ack 2782, win 272, length 0
# 请求处理完了, 返回数据
# 本地 第一次分手的 fin包 F
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
# 百度 返回的确认收到了
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
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
# 百度响应 本地发送第一次分手的结果 发送了一个ack回来 (第二次分手)
18:38:01.722514 IP 110.242.68.4.80 > 192.168.8.105.46236: Flags [.], ack 79, win 908, length 0
# 紧跟着百度又给本地发了一个 我也想跟你分手的包 F 第三次分手
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
# 本地 对 百度想分手的相应 第四次分手
18:38:01.722563 IP 192.168.8.105.46236 > 110.242.68.4.80: Flags [.], ack 2783, win 272, length 0
#真分了
# 最后这部分是四次分手的包; 至此一个请求curl命令的所有数据传输才真正的结束;
三次握手
四次分手
路由器内有个路由表
交换机内有个 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的包的发送和返回;