TCP 握手 -> 微服务

建立时 3 次握手

首先要安装 tcpdump 软件, sudo apt-get install tcpdump (用来抓包)

然后查看网卡的名字, ifconfig, 我这里网卡的名字是ens33.

然后我们再打开一个ssh链接,输入命令用来监听: tcpdump -nn -i ens33 port 80               这里我们抓的是80端口的包

然后我们打开另一个ssh链接, 输入 curl www.baidu.com    百度用的是 80 端口, 这样我们就请求一个网页, 看那边的监听情况

 

这是截图的结果. 不是特别明显, 还的用另一个命令 exec 9<> /dev/tcp/www.baidu.com/80 

 

exec 只是进行TCP链接, 其中 [S] 表示链接, 正常的流程是, 需要先和baidu 建立 TCP 链接, 然后在发HTTP请求利用这个TCP链接, 然后baidu 在回复网页.

这里的 9 可以理解为是一个 socket 的代表名称, 它就代表着跟baidu 的这个socket连接.

接下来可以给百度发HTTP请求,   echo -e  "GET / HTTP/1.0\n" >&9

然后正常来说可以通过 cat <&9  获取到返回内容. 我们可以看到返回内容(是http文件).

 

 

 

我们可以看到,我们命名的 9 实际上就是指向一个 socket 通信. 用的本地端口号是 34827.   socket 通信是 IP+端口的通信.

socket 是什么

socket 套接字 IP,PORT + IP,PORT

使用命令 netstat -natp

 

连接/通信 是建立在 客户端的 IP+端口 与 服务器的 IP+端口上的. 服务器的端口是 80, 而客户端每次随机拿出一个端口号与服务器建立连接, 注意,客户端自己也是需要一个端口号的,每次连接都需要一个端口号, 使用完,自动释放这个端口号,每个机器的端口号是有限制的 65535. 所以,也就是限制了socket通信的个数。一个浏览器的多个tab页也是使用不同的端口号。 

tcp协议: 面向连接的, 可靠的(靠对方确认的). 3次握手 -》数据传输 -》4次分手

3次握手:

1) 客户端 -> 服务器 发 SYN 数据包

2) 服务器 -> 客户端 发 ACK 数据包 acknowledge

3) 客户端 -> 服务器 发 ACK 数据包 acknowledge

然后, 客户端和服务器都可以分配内存资源了, 为对方服务 (这时还没发 HTTP包呢)

DDOS 攻击, 上面步骤1,2,都完成了,然后黑客修改了本地,导致客户端不发送3,而服务器在等待接收3。太多了就无法提供服务给别人了

DDOS 如何解决: 黑名单 + 负载均衡.

断开时 4 次分手

4次分手类似离婚, 因为对方会不同意

1) 客户端 -> 服务器 发FIN 数据包 finish 结束

2) 服务器 -> 客户端 ACK 数据包, acknowledge

3) 服务器 -> 客户端 发 FIN 数据包 服务器也想 finish

4)客户端 -> 服务器 发 ACK 数据包, acknowledge

详解上面截图:

 

 我的IP是 192.168.183.130, 百度的IP 182.61.200.7  , 上面截图一共3条报文 注意 <> 左右箭头方向

1): 我给百度发请求 S 表示报文 SYN

2): 百度回给我 S.  就是 ACK的意思

3): 我回百度 . 就是我本地的 ACK 的意思. 也有百度回正式数据的含义.

现在连接建立成功. (3次握手)

然后发了一些数据包, 其中状态 P 就是真正数据用的数据包已经发送完的意思, 因为数据包有大小限制,所以可能拆分成多个数据包,比如3个,那么再发送第三个的时候就会发送 P 标记. 

4次分手, F 就是 分手的标记

 

1) 我给百度发 F

2) 百度给我回 ack

3) 但是此时, 百度没给我回 FP, 所以客户端继续发 P 表示催促百度赶紧处理

4) 百度回 ACK

5) 我又发了一次 P

6) 百度回 ACK

7) 百度发 FP, 表示 百度也想断开了

8) 我回 ACK.  这时双方到已经得到对方确认可以断开了.

 

posted @ 2020-03-08 22:50  神之一招  阅读(383)  评论(0编辑  收藏  举报