每日技术:读《作为前端的你了解多少tcp的内容》笔记

原文地址:作为前端的你了解多少tcp的内容

学习笔记如下:

OSI网络分层,从上到下分别是:

  • 应用层(Application)
  • 表示层(Presentation)
  • 会话层(Session)
  • 传输层(Transport)
  • 网络层(Network)——路由器
  • 数据链路层(Data Link)——交换机
  • 物理层(Physical)——网卡、集线器(Hub)

抓包

利用百度首页做一个抓包实验

1. 下载安装wireshark

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会叠加,每一个传输方在传送数据时都会带上这个信息,另一端能按照这个序号来排序收到信息的顺序,从而保证了信息的传递是有序的,也能通过它来确认有没有出现丢包的情况。

原文地址:https://www.cnblogs.com/cathy1024/p/11289663.html