原文地址:作为前端的你了解多少tcp的内容
学习笔记如下:
OSI网络分层,从上到下分别是:
- 应用层(Application)
- 表示层(Presentation)
- 会话层(Session)
- 传输层(Transport)
- 网络层(Network)——路由器
- 数据链路层(Data Link)——交换机
- 物理层(Physical)——网卡、集线器(Hub)
抓包
利用百度首页做一个抓包实验
2.wireshark初始界面长这样,记得选择一个网络
3.菜单-捕获-捕获过滤器
选择HTTP TCP port(80)或TCP only
4.打开命令行窗口 ping www.baidu.com 获得ip
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会叠加,每一个传输方在传送数据时都会带上这个信息,另一端能按照这个序号来排序收到信息的顺序,从而保证了信息的传递是有序的,也能通过它来确认有没有出现丢包的情况。