应用层
表示层
会话层
传输层
网络层
数据链路层
物理层
除下http。来分析下每个字节。
Ethernet II, Src: Vmware_78:d3:e9 (00:0c:29:78:d3:e9), Dst: Vmware_ee:46:85 (00:50:56:ee:46:85)
1)每个mac地址是6个字节。目的mac地址:00:50:56:ee:46:85,是。源mac地址:00:0c:29:78:d3:e9是。
查看虚拟机的mac,正确。
2)而目的mac是虚拟机的网关。
3)后面是0800,是ip协议的代码。
4)Internet Protocol, Src: 192.168.87.128 (192.168.87.128), Dst: 220.181.164.104 (220.181.164.104)
1)4代表,是ipv4版本。
2)5代表5字节。
3)00代表:服务提供类型,第一个0:ecn-capable transport. 第二个0:ecn-ce。
4)0395是长度。10进制就是917.
5)3743,10进制是14147.是identifiation.
6)Fragmentation Flags: 0x4和0x0, 二进制就是01000000.
reserved bit: 0.
don't fragment:1
more fragments :00
fragment offset:00
7)0x80,代表 time to live 128.
8)0x06,上层协议。 0x06是tcp编码。
9)0x26d9 是hader checksum。
10)c0 a8 57 80 是原ip。192.168.87.128. 查看确实是本机ip。
11)dc b5a4 68 是目的ip。220.181.164.104.应该是baidu.comip。
12)fdfc 是原端口号。
13)0050是目的端口号。也就是80端口。
14)b8 45 d1 0d. sequence num 1+ next sequence number 878.+ack number 1+ header length 0d
15)4b7042aa
16)header length 0x50. 20bytes.
18)0x18 :psh,ack
20)faf0,window size:64240
21)check num:0xa8cf
22)0000
23)4745 54.后面就是http协议包和数据了。
0x47 ,acsii玛就是 g 45,e。54 .t。就是request method:get。
正确又简洁的图
SYN:同步序列编号(Synchronize Sequence Numbers)。
ACK:确认编号(Acknowledgement Number
TCP使用三次握手建立一个连接:
友好记忆:ssaa ,死杀啊
在吗?
在,在吗?
在
第一次握手:客户端发送SYN包至服务器,并进入SYN_SENT状态,等待服务器确认
第二次握手:服务器收到客户端的SYN包,发送一个ACK,同时发送自己的SYN,此时服务器进入SYN_RCVD状态
第三次握手:客户端接收到服务器发送的SYN+ACK后,进入ESTABLISHED状态,并发送服务器SYN包的确认ACK,服务器接收到客户端ACK后,进入ESTABLISHED状态
当客户端和服务器都进入ESTABLISHED状态后,客户端和服务器之间就可以开始双向传递数据了
友好记忆:fdafa:服大服啊
女孩:我要睡了fin
男孩:我把剩下的故事讲完,data
这下真的讲完了。 ack
男孩:好吧我也睡觉了 fin.
女孩:那88了 ack
画外音:男孩听到女孩说88后,就睡着了。女孩等了几分钟,确定男孩已经睡熟了也睡了。
中断连接端可以是Client端,也可以是Server端。
假设Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以你先发送ACK,"告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息"。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。当Server端确定数据已发送完成,则向Client端发送FIN报文,"告诉Client端,好了,我这边数据发完了,准备好关闭连接了"。Client端收到FIN报文后,"就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。“,Server端收到ACK后,"就知道可以断开连接了"。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!
tcp 包的大小对传输影响确实很大。测试包自身数据为4字节的碎片包。如果一个一个发送。100000个的话,在epoll的局渔环境下。因为称为碎片包来回大概5秒。而如果组合成最小64字节,大概3秒。
如果是1024,只有2秒。而2048,超过一个包,要分片的情况下要2秒还多点。比64还长点。
假设服务器3000个连接。这样但就包传送,用最合适的1024~1500,就少了1秒。对于实时游戏差距还是很大的。