原文地址:做为前端的你了解多少tcp的内容前端
学习笔记以下:服务器
OSI网络分层,从上到下分别是:网络
利用百度首页作一个抓包实验tcp
1. 下载安装wiresharkpost
2.wireshark初始界面长这样,记得选择一个网络学习
3.菜单-捕获-捕获过滤器spa
选择HTTP TCP port(80)或TCP only命令行
4.打开命令行窗口 ping www.baidu.com 得到ipblog
5.在应用显示过滤器...的输入框输入:ip.addr==180.101.49.12(上面得到的ip)排序
观察第一条protocol为TCP的信息
Source: 咱们本地电脑的ip
Destination: 百度的服务器ip (表示咱们本地ip向百度服务器ip发了第一个包)
Info:
Seq=0 表示起始的数据信号是0
Win=64240 表示咱们这边的窗口大小是64240
Len=0 表示咱们这边但愿接收的包的大小长度是0
MSS=1460 表示咱们这边本次传输能接收的最大包的内容是1460
下面咱们模拟一下三次握手的对话内容:
A:B,你好,我是A,请求创建链接,个人seq=0,win=64240,我但愿本次回应个人内容长度len为0,我本次能接收的最大内容是1460,over
B:A,你也好,收到你的信息了,我是B,我本次的seq是0(注意,双方的序号是独立计算的,这里都从0开始),我回应你的ack是1(A的seq+1,表明我收到你seq是0的消息了),个人窗口大小是8192,我但愿你回应我本次消息的len也是0,我这边能接收的最大回应大小是1452,over
A:好的,我收到你的回应了,我如今给你发送的seq是1,我回应你的ack事1(B的seq+1),我当前的窗口大小是262656,我但愿的回应长度是0,咱们创建好链接了,over
这就是三次握手
为何肯定一次链接须要三次握手?
1.tcp协议层是不关心ip的,具体ip的定位是由ip层来决定的,可是tcp层须要肯定端口号,因此他会携带source和destination的port信息,以便能找到对应的端口号
2.sequqnce number实际中使用的SEQ,也就是序号,这个序号起了很重要的做用。咱们都知道tcp和udp最大的区别在于tcp是稳定而且有序的。其中seq就能够保证有序。当A向B发送一个数据包时,seq会叠加,每个传输方在传送数据时都会带上这个信息,另外一端能按照这个序号来排序收到信息的顺序,从而保证了信息的传递是有序的,也能经过它来确认有没有出现丢包的状况。