Tcp三次握手、四次分手,Socket再看不懂,你砍我


本文学习笔记来源B站 牛皮了,头一次见有清华大佬把TCP,NIO,epoll一直到netty解释的这么明白

Tcp连接

Tcp是传输控制层协议,协议就是一个约束,约定双方进行沟通的方式,该层有两层协议:UDP、TCP,走到这一层的时,使用哪种协议进行传输就已经定了,在这我们只讨论TCP。
什么是TCP协议:面向连接的、可靠的协议,面向连接,什么是连接,这个“连接”是个什么东西,虚渺,怎么理解它,接着往下走。
想知道什么是连接,首先那么我们必须要理解TCP的三次握手、四次分手。
在这里插入图片描述
上面都是用户空间操作的,用户空间层,在忙着完成http协议的,而怎么通信的呢,只要告诉它要跟谁通信,那用户空间的应用层会调用内核层的所有环节,所以它于是两个环节。

三次握手

简易图如下:

在这里插入图片描述
syn:synchronous
ack:acknowledge 告知已收到的意思

为什么要三次

为什么要三次呢,前两次客户端已经明确了,能去服务端,而且服务端还能基于请求进行返回,那为啥还要第3次呢:其实最后一次的握手就要站在服务端一面,服务端能收到别人发来的,那么客户端面向我服务端的输入是通的,虽然我给客户端回了一个数据包,但是服务端不知道它收没收到啊,所以服务端还要等客户端的一个确认,所以,3次握手之后,这样双方才能确认输入输出都是通的

1.客户端发送请求至服务端,在这一步,服务端收到了客户端的请求,也只能表
示客户端与服务端的单向通信是连通的。
2.服务端收到客户端的请求,并响应。服务端能收到请求,但是客户端不知道你
有没有收到,所以你得告诉客户端我收到了,发送一个ack至客户端。而且,同样
的,你发我我能收到,那我发给你,你能收到吗?所以,发送syn+ack
3.客户端返回ack给服务端,客户端收到服务端的ack,知道了我跟服务端是通
的,然后再返给服务端一个ack,服务端收到ack之后,只能知道,喔,我发出去
的,你也能收到

当时我在理解这个的时候,因为没有对ack的正确认知,导致一直不理解、想不通:其实ACK只是确认收到你的数据包,并不代表任何意思,并不是说给了你ACK响应了,就表示我同意了,并不是的。它只是确认收到了你的数据包而已。意思要主动说出来,你想要干嘛,自己主动说出来,所以要3次握手。

至此,3次握手完成,其实这3次握手,就是在确认双向连接是否能连通,在3次握手之后,两端会有资源的开辟,代表为对方服务,来完成后续的服务,当完成资源的开辟之后,上面所谓的“连接”就有了,这就是所谓面向的连接,这个连接不是物理的,是两端对称的资源。(此前一直以为,面向连接就是两根网线能连通, ̄□ ̄||)

可靠的传输:三次握手建立了连接,三次握手中的ack确认机制保证了可靠的传输

三次握手需要上图中的内核空间的4层来完成,具体怎么传、传到那,是网络、链路…他们干的事,软件是工程学,是分层的,层与层之间是依赖的,不能一层全部活给干了,不便于扩展及维护,如同开发中的分层似的。

四次分手

理解了三次握手,那么四次分手,自然一说就能明白。
三次握手,是为了双方开辟资源,抛出线程,可靠传输,响应对方,而分手为什么要四次呢,因为分手是释放资源,必需要双方都确定都不发送或接收数据了,这个时候才能释放,简易图:
在这里插入图片描述
Fin:finish,就是要表达我想要结束的意思。

  1. 客户端发送想要结束的包
  2. 服务端对结束的包给客户端做出响应
  3. 服务端再次发送数据包。服务端是不是也想要停止呢,主动说出来,当它认为确实可以断开了,没数据传输了,那就结束吧,也发送一个结束包,给客户端
  4. 客户端对服务端的结束包做出响应,好的 我收到了

与三次握手的区别在于多了第三步,需要双方都确认finish了,才能断开,这也再啰嗦一句:ACK只是确认你的数据包,并不代表任何意思,意思要主动说出来,你想要干嘛,自己说出来。

光说不练,假把式

抓包看证据,抓包命令,如果没有,需要安装一下:

tcpdump -nn -i eth0 prot 80 回车之后,开始监听(需要有root权限)
-nn 是把抓到数据包中的ip、端口号全都变成数值显示
-i 是抓那个接口。抓eth0网卡,抓数据包中端口号为80 的。

如果电脑有多个网卡,需要确认你测试的时发出去的访问连接是通过你监听的那块网卡走出去的。或者你就把多余的网卡down掉,只保留你监听的那个网卡,通过命令down掉:ifconfig eth1 down。
down掉之后,你还要确定有没有网关能让你的数据包出去,如果没有,则添加一个网关:
在这里插入图片描述

如果设置虚拟机,没有设置root用户,但是每台机器都会有root用户,那么密码你的用户的密码

三次握手、四次分手抓包

在这里插入图片描述

tcpdump -nn -i eth0 port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes

19:06:02.569336 IP 192.168.111.131.46015 > 180.101.49.11.80: Flags [S], seq 676009814, win 14600, options [mss 1460,sackOK,TS val 15141229 ecr 0,nop,wscale 6], length 0
(我们本地的一个随机端口号192.168.111.131.46015,访问百度的80端口180.101.49.11.80,想要建立连接,数据包长度length 为0,现在还没发送数据,只是在三次握手)
19:06:02.648857 IP 180.101.49.11.80 > 192.168.111.131.46015: Flags [S.], seq 115756544, ack 676009815, win 64240, options [mss 1460], length 0
百度回了一个ack:S. +后面的ack,数据包长度依然为0
19:06:02.648958 IP 192.168.111.131.46015 > 180.101.49.11.80: Flags [.], ack 1, win 14600, length 0
客户端给百度回了一个ack,现在三次握手结束,建立连接(两端开辟资源)
是传输控制层控制的,所以数据包长度都为0

19:06:02.649284 IP 192.168.111.131.46015 > 180.101.49.11.80: Flags [P.], seq 1:167, ack 1, win 14600, length 166
本地发送数据给百度,数据长度为166,那个P 的意思是告诉百度,你要立刻处理,不要停留,因为我已经没有什么可发的了
19:06:02.649717 IP 180.101.49.11.80 > 192.168.111.131.46015: Flags [.], ack 167, win 64240, length 0
百度回一个ack

19:06:02.723199 IP 180.101.49.11.80 > 192.168.111.131.46015: Flags [P.], seq 1:1441, ack 167, win 64240, length 1440
百度处理完上面的请求,给客户端返回一个长度为1440的包
19:06:02.723245 IP 192.168.111.131.46015 > 180.101.49.11.80: Flags [.], ack 1441, win 17280, length 0
客户端给百度一个大小为0的ack
19:06:02.725712 IP 180.101.49.11.80 > 192.168.111.131.46015: Flags [P.], seq 1441:2782, ack 167, win 64240, length 1341
然后百度又给返回一个1341的数据包
19:06:02.725761 IP 192.168.111.131.46015 > 180.101.49.11.80: Flags [.], ack 2782, win 20160, length 0
客户端依然回了百度一个ack
一个发生了4步,分别是两次交互,1440+1341就是整个页面的大小字节数,为啥要分两次传输呢,是因为数据包大小是受到限制的,切割成包的,一个包的大小1460个字节,分几波发送。

19:06:02.726178 IP 192.168.111.131.46015 > 180.101.49.11.80: Flags [F.], seq 167, ack 2782, win 20160, length 0
然后,客户端发送给百度,我想结束了,想断开了
19:06:02.726689 IP 180.101.49.11.80 > 192.168.111.131.46015: Flags [.], ack 168, win 64239, length 0
百度回个ack,我知道了,但是我想不想断开,我再想想
19:06:02.776867 IP 180.101.49.11.80 > 192.168.111.131.46015: Flags [FP.], seq 2782, ack 168, win 64239, length 0
然后,百度想了想,你个负心人,断开就断开,拜拜
19:06:02.776928 IP 192.168.111.131.46015 > 180.101.49.11.80: Flags [.], ack 2783, win 20160, length 0
最后,客户端回给百度一个ack

每次交互,都会有一次ack,再啰嗦一句。。。ack只是表示我收到了,没有任何意思

如果想看报文的具体信息,那么就在tcpdump命令中加个参数,可以看到每次发送报文的内容:
tcpdump -nn -X -i eth0 port 80,以下内容可忽略:

[root@bogon test]# tcpdump -nn -X -i eth0 port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
19:43:31.180092 IP 192.168.111.131.47860 > 180.101.49.12.80: Flags [S], seq 2597667236, win 14600, options [mss 1460,sackOK,TS val 17389839 ecr 0,nop,wscale 6], length 0
	0x0000:  4500 003c 18ab 4000 4006 0c74 c0a8 6f83  E..<..@.@..t..o.
	0x0010:  b465 310c baf4 0050 9ad5 41a4 0000 0000  .e1....P..A.....
	0x0020:  a002 3908 0785 0000 0204 05b4 0402 080a  ..9.............
	0x0030:  0109 590f 0000 0000 0103 0306            ..Y.........
19:43:31.226570 IP 180.101.49.12.80 > 192.168.111.131.47860: Flags [S.], seq 7361780, ack 2597667237, win 64240, options [mss 1460], length 0
	0x0000:  4500 002c 00f5 0000 8006 243a b465 310c  E..,......$:.e1.
	0x0010:  c0a8 6f83 0050 baf4 0070 54f4 9ad5 41a5  ..o..P...pT...A.
	0x0020:  6012 faf0 9a64 0000 0204 05b4 0000       `....d........
19:43:31.226605 IP 192.168.111.131.47860 > 180.101.49.12.80: Flags [.], ack 1, win 14600, length 0
	0x0000:  4500 0028 18ac 4000 4006 0c87 c0a8 6f83  E..(..@.@.....o.
	0x0010:  b465 310c baf4 0050 9ad5 41a5 0070 54f5  .e1....P..A..pT.
	0x0020:  5010 3908 740a 0000                      P.9.t...
19:43:31.226847 IP 192.168.111.131.47860 > 180.101.49.12.80: Flags [P.], seq 1:167, ack 1, win 14600, length 166
	0x0000:  4500 00ce 18ad 4000 4006 0be0 c0a8 6f83  E.....@.@.....o.
	0x0010:  b465 310c baf4 0050 9ad5 41a5 0070 54f5  .e1....P..A..pT.
	0x0020:  5018 3908 e604 0000 4745 5420 2f20 4854  P.9.....GET./.HT
	0x0030:  5450 2f31 2e31 0d0a 5573 6572 2d41 6765  TP/1.1..User-Age
	0x0040:  6e74 3a20 6375 726c 2f37 2e31 392e 3720  nt:.curl/7.19.7.
	0x0050:  2869 3338 362d 7265 6468 6174 2d6c 696e  (i386-redhat-lin
	0x0060:  7578 2d67 6e75 2920 6c69 6263 7572 6c2f  ux-gnu).libcurl/
	0x0070:  372e 3139 2e37 204e 5353 2f33 2e31 342e  7.19.7.NSS/3.14.
	0x0080:  302e 3020 7a6c 6962 2f31 2e32 2e33 206c  0.0.zlib/1.2.3.l
	0x0090:  6962 6964 6e2f 312e 3138 206c 6962 7373  ibidn/1.18.libss
	0x00a0:  6832 2f31 2e34 2e32 0d0a 486f 7374 3a20  h2/1.4.2..Host:.
	0x00b0:  7777 772e 6261 6964 752e 636f 6d0d 0a41  www.baidu.com..A
	0x00c0:  6363 6570 743a 202a 2f2a 0d0a 0d0a       ccept:.*/*....
19:43:31.227220 IP 180.101.49.12.80 > 192.168.111.131.47860: Flags [.], ack 167, win 64240, length 0
	0x0000:  4500 0028 00f6 0000 8006 243d b465 310c  E..(......$=.e1.
	0x0010:  c0a8 6f83 0050 baf4 0070 54f5 9ad5 424b  ..o..P...pT...BK
	0x0020:  5010 faf0 b17b 0000 0000 0000 0000       P....{........
19:43:31.273168 IP 180.101.49.12.80 > 192.168.111.131.47860: Flags [P.], seq 1:1441, ack 167, win 64240, length 1440
	0x0000:  4500 05c8 00f7 0000 8006 1e9c b465 310c  E............e1.
	0x0010:  c0a8 6f83 0050 baf4 0070 54f5 9ad5 424b  ..o..P...pT...BK
	0x0020:  5018 faf0 9b3f 0000 4854 5450 2f31 2e31  P....?..HTTP/1.1
	0x0030:  2032 3030 204f 4b0d 0a41 6363 6570 742d  .200.OK..Accept-
	0x0040:  5261 6e67 6573 3a20 6279 7465 730d 0a43  Ranges:.bytes..C
	0x0050:  6163 6865 2d43 6f6e 7472 6f6c 3a20 7072  ache-Control:.pr
	0x0060:  6976 6174 652c 206e 6f2d 6361 6368 652c  ivate,.no-cache,
	0x0070:  206e 6f2d 7374 6f72 652c 2070 726f 7879  .no-store,.proxy
	0x0080:  2d72 6576 616c 6964 6174 652c 206e 6f2d  -revalidate,.no-
	0x0090:  7472 616e 7366 6f72 6d0d 0a43 6f6e 6e65  transform..Conne
	0x00a0:  6374 696f 6e3a 206b 6565 702d 616c 6976  ction:.keep-aliv
	0x00b0:  650d 0a43 6f6e 7465 6e74 2d4c 656e 6774  e..Content-Lengt
	0x00c0:  683a 2032 3338 310d 0a43 6f6e 7465 6e74  h:.2381..Content
	0x00d0:  2d54 7970 653a 2074 6578 742f 6874 6d6c  -Type:.text/html
	0x00e0:  0d0a 4461 7465 3a20 5468 752c 2031 3520  ..Date:.Thu,.15.
	0x00f0:  4f63 7420 3230 3230 2030 323a 3433 3a33  Oct.2020.02:43:3
	0x0100:  3220 474d 540d 0a45 7461 673a 2022 3538  2.GMT..Etag:."58
	0x0110:  3836 3034 6338 2d39 3464 220d 0a4c 6173  8604c8-94d"..Las
	0x0120:  742d 4d6f 6469 6669 6564 3a20 4d6f 6e2c  t-Modified:.Mon,
	0x0130:  2032 3320 4a61 6e20 3230 3137 2031 333a  .23.Jan.2017.13:
	0x0140:  3237 3a33 3620 474d 540d 0a50 7261 676d  27:36.GMT..Pragm
	0x0150:  613a 206e 6f2d 6361 6368 650d 0a53 6572  a:.no-cache..Ser
	0x0160:  7665 723a 2062 6665 2f31 2e30 2e38 2e31  ver:.bfe/1.0.8.1
	0x0170:  380d 0a53 6574 2d43 6f6f 6b69 653a 2042  8..Set-Cookie:.B
	0x0180:  444f 525a 3d32 3733 3135 3b20 6d61 782d  DORZ=27315;.max-
	0x0190:  6167 653d 3836 3430 303b 2064 6f6d 6169  age=86400;.domai
	0x01a0:  6e3d 2e62 6169 6475 2e63 6f6d 3b20 7061  n=.baidu.com;.pa
	0x01b0:  7468 3d2f 0d0a 0d0a 3c21 444f 4354 5950  th=/....<!DOCTYP
	0x01c0:  4520 6874 6d6c 3e0d 0a3c 212d 2d53 5441  E.html>..<!--STA
	0x01d0:  5455 5320 4f4b 2d2d 3e3c 6874 6d6c 3e20  TUS.OK--><html>.
	0x01e0:  3c68 6561 643e 3c6d 6574 6120 6874 7470  <head><meta.http
	0x01f0:  2d65 7175 6976 3d63 6f6e 7465 6e74 2d74  -equiv=content-t
	0x0200:  7970 6520 636f 6e74 656e 743d 7465 7874  ype.content=text
	0x0210:  2f68 746d 6c3b 6368 6172 7365 743d 7574  /html;charset=ut
	0x0220:  662d 383e 3c6d 6574 6120 6874 7470 2d65  f-8><meta.http-e
	0x0230:  7175 6976 3d58 2d55 412d 436f 6d70 6174  quiv=X-UA-Compat
	0x0240:  6962 6c65 2063 6f6e 7465 6e74 3d49 453d  ible.content=IE=
	0x0250:  4564 6765 3e3c 6d65 7461 2063 6f6e 7465  Edge><meta.conte
	0x0260:  6e74 3d61 6c77 6179 7320 6e61 6d65 3d72  nt=always.name=r
	0x0270:  6566 6572 7265 723e 3c6c 696e 6b20 7265  eferrer><link.re
	0x0280:  6c3d 7374 796c 6573 6865 6574 2074 7970  l=stylesheet.typ
	0x0290:  653d 7465 7874 2f63 7373 2068 7265 663d  e=text/css.href=
	0x02a0:  6874 7470 3a2f 2f73 312e 6264 7374 6174  http://s1.bdstat
	0x02b0:  6963 2e63 6f6d 2f72 2f77 7777 2f63 6163  ic.com/r/www/cac
	0x02c0:  6865 2f62 646f 727a 2f62 6169 6475 2e6d  he/bdorz/baidu.m
	0x02d0:  696e 2e63 7373 3e3c 7469 746c 653e e799  in.css><title>..
	0x02e0:  bee5 baa6 e4b8 80e4 b88b efbc 8ce4 bda0  ................
	0x02f0:  e5b0 b1e7 9fa5 e981 933c 2f74 6974 6c65  .........</title
	0x0300:  3e3c 2f68 6561 643e 203c 626f 6479 206c  ></head>.<body.l
	0x0310:  696e 6b3d 2330 3030 3063 633e 203c 6469  ink=#0000cc>.<di
	0x0320:  7620 6964 3d77 7261 7070 6572 3e20 3c64  v.id=wrapper>.<d
	0x0330:  6976 2069 643d 6865 6164 3e20 3c64 6976  iv.id=head>.<div
	0x0340:  2063 6c61 7373 3d68 6561 645f 7772 6170  .class=head_wrap
	0x0350:  7065 723e 203c 6469 7620 636c 6173 733d  per>.<div.class=
	0x0360:  735f 666f 726d 3e20 3c64 6976 2063 6c61  s_form>.<div.cla
	0x0370:  7373 3d73 5f66 6f72 6d5f 7772 6170 7065  ss=s_form_wrappe
	0x0380:  723e 203c 6469 7620 6964 3d6c 673e 203c  r>.<div.id=lg>.<
	0x0390:  696d 6720 6869 6465 666f 6375 733d 7472  img.hidefocus=tr
	0x03a0:  7565 2073 7263 3d2f 2f77 7777 2e62 6169  ue.src=//www.bai
	0x03b0:  6475 2e63 6f6d 2f69 6d67 2f62 645f 6c6f  du.com/img/bd_lo
	0x03c0:  676f 312e 706e 6720 7769 6474 683d 3237  go1.png.width=27
	0x03d0:  3020 6865 6967 6874 3d31 3239 3e20 3c2f  0.height=129>.</
	0x03e0:  6469 763e 203c 666f 726d 2069 643d 666f  div>.<form.id=fo
	0x03f0:  726d 206e 616d 653d 6620 6163 7469 6f6e  rm.name=f.action
	0x0400:  3d2f 2f77 7777 2e62 6169 6475 2e63 6f6d  =//www.baidu.com
	0x0410:  2f73 2063 6c61 7373 3d66 6d3e 203c 696e  /s.class=fm>.<in
	0x0420:  7075 7420 7479 7065 3d68 6964 6465 6e20  put.type=hidden.
	0x0430:  6e61 6d65 3d62 646f 727a 5f63 6f6d 6520  name=bdorz_come.
	0x0440:  7661 6c75 653d 313e 203c 696e 7075 7420  value=1>.<input.
	0x0450:  7479 7065 3d68 6964 6465 6e20 6e61 6d65  type=hidden.name
	0x0460:  3d69 6520 7661 6c75 653d 7574 662d 383e  =ie.value=utf-8>
	0x0470:  203c 696e 7075 7420 7479 7065 3d68 6964  .<input.type=hid
	0x0480:  6465 6e20 6e61 6d65 3d66 2076 616c 7565  den.name=f.value
	0x0490:  3d38 3e20 3c69 6e70 7574 2074 7970 653d  =8>.<input.type=
	0x04a0:  6869 6464 656e 206e 616d 653d 7273 765f  hidden.name=rsv_
	0x04b0:  6270 2076 616c 7565 3d31 3e20 3c69 6e70  bp.value=1>.<inp
	0x04c0:  7574 2074 7970 653d 6869 6464 656e 206e  ut.type=hidden.n
	0x04d0:  616d 653d 7273 765f 6964 7820 7661 6c75  ame=rsv_idx.valu
	0x04e0:  653d 313e 203c 696e 7075 7420 7479 7065  e=1>.<input.type
	0x04f0:  3d68 6964 6465 6e20 6e61 6d65 3d74 6e20  =hidden.name=tn.
	0x0500:  7661 6c75 653d 6261 6964 753e 3c73 7061  value=baidu><spa
	0x0510:  6e20 636c 6173 733d 2262 6720 735f 6970  n.class="bg.s_ip
	0x0520:  745f 7772 223e 3c69 6e70 7574 2069 643d  t_wr"><input.id=
	0x0530:  6b77 206e 616d 653d 7764 2063 6c61 7373  kw.name=wd.class
	0x0540:  3d73 5f69 7074 2076 616c 7565 206d 6178  =s_ipt.value.max
	0x0550:  6c65 6e67 7468 3d32 3535 2061 7574 6f63  length=255.autoc
	0x0560:  6f6d 706c 6574 653d 6f66 6620 6175 746f  omplete=off.auto
	0x0570:  666f 6375 733e 3c2f 7370 616e 3e3c 7370  focus></span><sp
	0x0580:  616e 2063 6c61 7373 3d22 6267 2073 5f62  an.class="bg.s_b
	0x0590:  746e 5f77 7222 3e3c 696e 7075 7420 7479  tn_wr"><input.ty
	0x05a0:  7065 3d73 7562 6d69 7420 6964 3d73 7520  pe=submit.id=su.
	0x05b0:  7661 6c75 653d e799 bee5 baa6 e4b8 80e4  value=..........
	0x05c0:  b88b 2063 6c61 7373                      ...class
19:43:31.273193 IP 192.168.111.131.47860 > 180.101.49.12.80: Flags [.], ack 1441, win 17280, length 0
	0x0000:  4500 0028 18ae 4000 4006 0c85 c0a8 6f83  E..(..@.@.....o.
	0x0010:  b465 310c baf4 0050 9ad5 424b 0070 5a95  .e1....P..BK.pZ.
	0x0020:  5010 4380 634c 0000                      P.C.cL..
19:43:31.273472 IP 180.101.49.12.80 > 192.168.111.131.47860: Flags [P.], seq 1441:2782, ack 167, win 64240, length 1341
	0x0000:  4500 0565 00f8 0000 8006 1efe b465 310c  E..e.........e1.
	0x0010:  c0a8 6f83 0050 baf4 0070 5a95 9ad5 424b  ..o..P...pZ...BK
	0x0020:  5018 faf0 47ac 0000 3d22 6267 2073 5f62  P...G...="bg.s_b
	0x0030:  746e 223e 3c2f 7370 616e 3e20 3c2f 666f  tn"></span>.</fo
	0x0040:  726d 3e20 3c2f 6469 763e 203c 2f64 6976  rm>.</div>.</div
	0x0050:  3e20 3c64 6976 2069 643d 7531 3e20 3c61  >.<div.id=u1>.<a
	0x0060:  2068 7265 663d 6874 7470 3a2f 2f6e 6577  .href=http://new
	0x0070:  732e 6261 6964 752e 636f 6d20 6e61 6d65  s.baidu.com.name
	0x0080:  3d74 6a5f 7472 6e65 7773 2063 6c61 7373  =tj_trnews.class
	0x0090:  3d6d 6e61 763e e696 b0e9 97bb 3c2f 613e  =mnav>......</a>
	0x00a0:  203c 6120 6872 6566 3d68 7474 703a 2f2f  .<a.href=http://
	0x00b0:  7777 772e 6861 6f31 3233 2e63 6f6d 206e  www.hao123.com.n
	0x00c0:  616d 653d 746a 5f74 7268 616f 3132 3320  ame=tj_trhao123.
	0x00d0:  636c 6173 733d 6d6e 6176 3e68 616f 3132  class=mnav>hao12
	0x00e0:  333c 2f61 3e20 3c61 2068 7265 663d 6874  3</a>.<a.href=ht
	0x00f0:  7470 3a2f 2f6d 6170 2e62 6169 6475 2e63  tp://map.baidu.c
	0x0100:  6f6d 206e 616d 653d 746a 5f74 726d 6170  om.name=tj_trmap
	0x0110:  2063 6c61 7373 3d6d 6e61 763e e59c b0e5  .class=mnav>....
	0x0120:  9bbe 3c2f 613e 203c 6120 6872 6566 3d68  ..</a>.<a.href=h
	0x0130:  7474 703a 2f2f 762e 6261 6964 752e 636f  ttp://v.baidu.co
	0x0140:  6d20 6e61 6d65 3d74 6a5f 7472 7669 6465  m.name=tj_trvide
	0x0150:  6f20 636c 6173 733d 6d6e 6176 3ee8 a786  o.class=mnav>...
	0x0160:  e9a2 913c 2f61 3e20 3c61 2068 7265 663d  ...</a>.<a.href=
	0x0170:  6874 7470 3a2f 2f74 6965 6261 2e62 6169  http://tieba.bai
	0x0180:  6475 2e63 6f6d 206e 616d 653d 746a 5f74  du.com.name=tj_t
	0x0190:  7274 6965 6261 2063 6c61 7373 3d6d 6e61  rtieba.class=mna
	0x01a0:  763e e8b4 b4e5 90a7 3c2f 613e 203c 6e6f  v>......</a>.<no
	0x01b0:  7363 7269 7074 3e20 3c61 2068 7265 663d  script>.<a.href=
	0x01c0:  6874 7470 3a2f 2f77 7777 2e62 6169 6475  http://www.baidu
	0x01d0:  2e63 6f6d 2f62 646f 727a 2f6c 6f67 696e  .com/bdorz/login
	0x01e0:  2e67 6966 3f6c 6f67 696e 2661 6d70 3b74  .gif?login&amp;t
	0x01f0:  706c 3d6d 6e26 616d 703b 753d 6874 7470  pl=mn&amp;u=http
	0x0200:  2533 4125 3246 2532 4677 7777 2e62 6169  %3A%2F%2Fwww.bai
	0x0210:  6475 2e63 6f6d 2532 6625 3366 6264 6f72  du.com%2f%3fbdor
	0x0220:  7a5f 636f 6d65 2533 6431 206e 616d 653d  z_come%3d1.name=
	0x0230:  746a 5f6c 6f67 696e 2063 6c61 7373 3d6c  tj_login.class=l
	0x0240:  623e e799 bbe5 bd95 3c2f 613e 203c 2f6e  b>......</a>.</n
	0x0250:  6f73 6372 6970 743e 203c 7363 7269 7074  oscript>.<script
	0x0260:  3e64 6f63 756d 656e 742e 7772 6974 6528  >document.write(
	0x0270:  273c 6120 6872 6566 3d22 6874 7470 3a2f  '<a.href="http:/
	0x0280:  2f77 7777 2e62 6169 6475 2e63 6f6d 2f62  /www.baidu.com/b
	0x0290:  646f 727a 2f6c 6f67 696e 2e67 6966 3f6c  dorz/login.gif?l
	0x02a0:  6f67 696e 2674 706c 3d6d 6e26 753d 272b  ogin&tpl=mn&u='+
	0x02b0:  2065 6e63 6f64 6555 5249 436f 6d70 6f6e  .encodeURICompon
	0x02c0:  656e 7428 7769 6e64 6f77 2e6c 6f63 6174  ent(window.locat
	0x02d0:  696f 6e2e 6872 6566 2b20 2877 696e 646f  ion.href+.(windo
	0x02e0:  772e 6c6f 6361 7469 6f6e 2e73 6561 7263  w.location.searc
	0x02f0:  6820 3d3d 3d20 2222 203f 2022 3f22 203a  h.===."".?."?".:
	0x0300:  2022 2622 292b 2022 6264 6f72 7a5f 636f  ."&")+."bdorz_co
	0x0310:  6d65 3d31 2229 2b20 2722 206e 616d 653d  me=1")+.'".name=
	0x0320:  2274 6a5f 6c6f 6769 6e22 2063 6c61 7373  "tj_login".class
	0x0330:  3d22 6c62 223e e799 bbe5 bd95 3c2f 613e  ="lb">......</a>
	0x0340:  2729 3b3c 2f73 6372 6970 743e 203c 6120  ');</script>.<a.
	0x0350:  6872 6566 3d2f 2f77 7777 2e62 6169 6475  href=//www.baidu
	0x0360:  2e63 6f6d 2f6d 6f72 652f 206e 616d 653d  .com/more/.name=
	0x0370:  746a 5f62 7269 6963 6f6e 2063 6c61 7373  tj_briicon.class
	0x0380:  3d62 7269 2073 7479 6c65 3d22 6469 7370  =bri.style="disp
	0x0390:  6c61 793a 2062 6c6f 636b 3b22 3ee6 9bb4  lay:.block;">...
	0x03a0:  e5a4 9ae4 baa7 e593 813c 2f61 3e20 3c2f  .........</a>.</
	0x03b0:  6469 763e 203c 2f64 6976 3e20 3c2f 6469  div>.</div>.</di
	0x03c0:  763e 203c 6469 7620 6964 3d66 7443 6f6e  v>.<div.id=ftCon
	0x03d0:  3e20 3c64 6976 2069 643d 6674 436f 6e77  >.<div.id=ftConw
	0x03e0:  3e20 3c70 2069 643d 6c68 3e20 3c61 2068  >.<p.id=lh>.<a.h
	0x03f0:  7265 663d 6874 7470 3a2f 2f68 6f6d 652e  ref=http://home.
	0x0400:  6261 6964 752e 636f 6d3e e585 b3e4 ba8e  baidu.com>......
	0x0410:  e799 bee5 baa6 3c2f 613e 203c 6120 6872  ......</a>.<a.hr
	0x0420:  6566 3d68 7474 703a 2f2f 6972 2e62 6169  ef=http://ir.bai
	0x0430:  6475 2e63 6f6d 3e41 626f 7574 2042 6169  du.com>About.Bai
	0x0440:  6475 3c2f 613e 203c 2f70 3e20 3c70 2069  du</a>.</p>.<p.i
	0x0450:  643d 6370 3e26 636f 7079 3b32 3031 3726  d=cp>&copy;2017&
	0x0460:  6e62 7370 3b42 6169 6475 266e 6273 703b  nbsp;Baidu&nbsp;
	0x0470:  3c61 2068 7265 663d 6874 7470 3a2f 2f77  <a.href=http://w
	0x0480:  7777 2e62 6169 6475 2e63 6f6d 2f64 7574  ww.baidu.com/dut
	0x0490:  792f 3ee4 bdbf e794 a8e7 99be e5ba a6e5  y/>.............
	0x04a0:  898d e5bf 85e8 afbb 3c2f 613e 266e 6273  ........</a>&nbs
	0x04b0:  703b 203c 6120 6872 6566 3d68 7474 703a  p;.<a.href=http:
	0x04c0:  2f2f 6a69 616e 7969 2e62 6169 6475 2e63  //jianyi.baidu.c
	0x04d0:  6f6d 2f20 636c 6173 733d 6370 2d66 6565  om/.class=cp-fee
	0x04e0:  6462 6163 6b3e e684 8fe8 a781 e58f 8de9  dback>..........
	0x04f0:  a688 3c2f 613e 266e 6273 703b e4ba ac49  ..</a>&nbsp;...I
	0x0500:  4350 e8af 8130 3330 3137 33e5 8fb7 266e  CP...030173...&n
	0x0510:  6273 703b 203c 696d 6720 7372 633d 2f2f  bsp;.<img.src=//
	0x0520:  7777 772e 6261 6964 752e 636f 6d2f 696d  www.baidu.com/im
	0x0530:  672f 6773 2e67 6966 3e20 3c2f 703e 203c  g/gs.gif>.</p>.<
	0x0540:  2f64 6976 3e20 3c2f 6469 763e 203c 2f64  /div>.</div>.</d
	0x0550:  6976 3e20 3c2f 626f 6479 3e20 3c2f 6874  iv>.</body>.</ht
	0x0560:  6d6c 3e0d 0a                             ml>..
19:43:31.273481 IP 192.168.111.131.47860 > 180.101.49.12.80: Flags [.], ack 2782, win 20160, length 0
	0x0000:  4500 0028 18af 4000 4006 0c84 c0a8 6f83  E..(..@.@.....o.
	0x0010:  b465 310c baf4 0050 9ad5 424b 0070 5fd2  .e1....P..BK.p_.
	0x0020:  5010 4ec0 52cf 0000                      P.N.R...
19:43:31.274349 IP 192.168.111.131.47860 > 180.101.49.12.80: Flags [F.], seq 167, ack 2782, win 20160, length 0
	0x0000:  4500 0028 18b0 4000 4006 0c83 c0a8 6f83  E..(..@.@.....o.
	0x0010:  b465 310c baf4 0050 9ad5 424b 0070 5fd2  .e1....P..BK.p_.
	0x0020:  5011 4ec0 52ce 0000                      P.N.R...
19:43:31.274956 IP 180.101.49.12.80 > 192.168.111.131.47860: Flags [.], ack 168, win 64239, length 0
	0x0000:  4500 0028 00f9 0000 8006 243a b465 310c  E..(......$:.e1.
	0x0010:  c0a8 6f83 0050 baf4 0070 5fd2 9ad5 424c  ..o..P...p_...BL
	0x0020:  5010 faef a69e 0000 0000 0000 0000       P.............
19:43:31.312963 IP 180.101.49.12.80 > 192.168.111.131.47860: Flags [FP.], seq 2782, ack 168, win 64239, length 0
	0x0000:  4500 0028 00fa 0000 8006 2439 b465 310c  E..(......$9.e1.
	0x0010:  c0a8 6f83 0050 baf4 0070 5fd2 9ad5 424c  ..o..P...p_...BL
	0x0020:  5019 faef a695 0000 0000 0000 0000       P.............
19:43:31.312985 IP 192.168.111.131.47860 > 180.101.49.12.80: Flags [.], ack 2783, win 20160, length 0
	0x0000:  4500 0028 0000 4000 4006 2533 c0a8 6f83  E..(..@.@.%3..o.
	0x0010:  b465 310c baf4 0050 9ad5 424c 0070 5fd3  .e1....P..BL.p_.
	0x0020:  5010 4ec0 52cd 0000                      P.N.R...

三次握手到四次分手是不可被分割的最小粒度

通过负载均衡器这个场景我们可以想一下,
在这里插入图片描述
第一次发给了s1服务器,第二次发的包仍然只能发给s1,不能发给s2,如果发生错发情况,s1没有后面的步骤,s2没有前面的步骤,那么最终结果就是s1、s2都会失败,那么对应的就是c端也会失败,双方都开辟不了资源,交互不了,连接失败。

Socket

文件描述符

说socket之前,先了解下linux的“一切皆文件”。

exec 8<> /dev/tcp/www.baidu.com/80
路径必须是/dev/tcp

<>表示输入输出,这个8指向了后面的socket链接,/dev/tcp/www.baidu.com/80看似是一个文件路径,其实是linux一切皆文件的特性,linux内核会将路径转换成与百度的一个tcp socket链接,用8指向了这个连接,通过操作这个文件可以从连接中可以输入流输出流。
这个8的术语就叫 文件描述符 file descriptor,如同java中的变量
在这里插入图片描述

获取输入输出流

echo -e "GET / HTTP/1.0\n" 1>& 8
-e是为了解析\n,1表示标准输出,在linux中,“>”是将结果到文件中,而“>&”是到另一个文件中
cat 0<& 8
0表示标准输入

其实说的上面那么多,就为了表达一个意思:一个socket连接,可以用一个文件描述符来表示

socket套接字

ip+port:ip+port
通过netstat -natp 查看目前的连接,同一个客户端访问服务端一个端口,套接字中,一定有一个维度来区分不同的连接,所以socket套接字,就是ip+port套上ip+port,一个随机端口号访问一个ip上的固定端口号

在这里插入图片描述

ip:是互联网中主机定位用的,也就是可以通过ip找到这个主机
port:找到主机之后,而这个主机中有很多进程,那你要把这个数据包交给那个进程,通过这个端口号来找到程序的进程或线程。

服务端的端口号是固定的,比如tomcat的8080,客户端的端口号是随机的,最多65535个,但是不要认为一台机器总共只能随机65535个,你要明白套接字,他们是一组,不能只看一半,也就是说如果再连另外一台机器,依然能建立65535个链接。即使端口号重复了,但是整个socket是不重复的。
上面是基于客户端,那么服务端呢,建立了65535个链接,那服务端消耗了几个端口号呢:没错,只会消耗1个,如图所示。
在这里插入图片描述
那么他们怎么通信的呢,上面也说了,三次握手之后,建立连接(两端资源的开辟),在建立连接的时候,同时也会fock出一个进程或者线程,将socket与这个进程或线程进行绑定,那持有是怎样的一个形式呢,你别忘了,我们上面建立的一个socket,以一个文件描述符8来体现,那么这个线程或者进程只对这个文件描述符8进行读写就可以了,也就是说在fock线程或者进程的时候,socket被描述成了文件描述符,然后把这个文件描述符与fock出的线程或者进程绑定起来,然后这个线程或进程只对这个文件描述符8进行操作就行了。

通过上图,我们知道了现在是一个线程或者进程对应一个socket,那多个socket能不能对应一个进程或线程呢??—这个知识点就是多路复用器 epoll,意思也就是说一个进程或线程对应多个客户端,避免浪费资源

就是你应用层组装数据,然后递给下一层–传输控制层,下层知道了你想要连接,然后就帮你趟路,进行握手,看路通不通、好不好走,然后准备好第一次握手包之后就停住了,因为这个包不是传输层发出去的,这个包怎么发出去,怎么找到对方主机,不是我控制层做的,所以就开始调用网络层、…层,通过网关 mac地址找到对方主机,每一层都有协议,最后就是,各层各司其职,上面的层都是阻塞的。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值