-
>.< 场景导入
(一):
你跟你的小女朋友打电话,若一直是你的女朋友在说,而你只是在听。那么你女朋友会生气! 为啥呢? 因为她感觉你没有听她说话,然后觉得你不爱她了。 哈哈 ,通俗一点说就是 打电话时你得 “嗯 , 啊 , 我觉得是这样…”等,必须 有问有答 才能愉快的聊天。
(二):
中间有一条河,需要将一边的货物扔向另一边,这时可不能随意,因为货物有多少,扔过去多少,对方接到了多少…双方都必须要拿一个本子记录下来。(类比于 tcp 的作用) -
?.? TCP报文架构图
-
>.< 报文及抓包分析
1.port(端口): 不知你有没有看到图中 src port 和 Dst port ,一个是你本机的端口,另一个是 web 站点监听的 port 。(端口号类比于两栋大楼的单间号,要想大楼之间通信,必须知道对方的房间号才能准确发送)
ps: 本机(src)端口查看命令 :打开cmd (快捷键 win + r 输入 cmd)
2.序号与确认序号(Ack / Seq):但你访问某东时,浏览器会将整个页面通过网络传输到你的电脑上,包括你先在看的这篇文章也是如此。 但数据量太大,一次性不可能全部发完。因此,数据得分段,分包。将部分数据放入网卡缓存中,依次发送。
tcp可是一个很靠谱的男人,不存在开完车就不负责任的。即每发完一段数据,都得等对方的 ACK ,才能继续发送剩下得数据。如图所示:
从缓存中发送 [ 1 2 3 ],此时得 Seq(序列号) = 1 , 序列号通俗一点就是一个数据段得第一个字节。) 想想你女朋友跟你说完一句话, 你必须回应才能代表你在听她说话。 这个过程也是如此,当收到 [ 1 2 3 ] 后,必须用 确认号 回应,表示收到你所发的数据,可以继续发送。此时得 ACK( 确认号)=4.
或者还不理解,你就这样想: (发送方:)序号是发送数据段得第一个字节,在进行段组装成包时用于定位作用。 (接收方:)确认号是收到数据段末尾一个字节自增(+1)。【让发送者下次应该发哪段数据】3.数据偏移:
在 Tcp 报文中,用于区分TCP首部和 TCP 数据部分。
4.保留:
字面意思,也就是这部分是一片真理得大海,等着你来挖掘。
5.字母部分:
先了解每一列字母组合起来得作用:
状态位 作用 URG 提高数据包优先级(优先级高则先发) ACK 数据应答 PSH 接收端让优先级高的包先插队进行处理 RST 重新连接(网络异常) SYN 发起连接(访问某东时,或别的web站点) FIN 结束连接 5.窗口:
TCP 的窗口分为: 接收窗口,发送窗口,拥塞窗口等。你只需要知道窗口用于流量控制,拥塞控制。
如果你对TCP如何实现流量控制感兴趣(可以点击下面的链接):
---------------------两个控制传送门 >.< ----------------------------------6.校验和:
顾名思义,用于数据校对用。通俗点说,就是看看有啥数据传错了没。7.紧急指针:
和 URG 状态位配合使用。 发送一个非常着急的数据包时,要想快速发出,必须插队排在缓存出口处,也必须标记(紧急指针的作用)这个数据段在整个包内的位置。不然接收方收到,无法拼接成完成的数据包。8.可变部分:
选项,和填充部分一般很少用到,这里就不在赘述。
----------------------------------》.《---------------------------------------------------------
=.= 总结:
顺序问题,稳重不乱。
丢包问题,承诺靠谱。
连接维护,有始有终。
流量控制,把握分寸。
拥塞控制,激流勇进。
-.- 课后连接传送门 :
ICMP/IP 协议,网络世界的侦察兵