输入URL到返回,牵扯出的网络知识一(TCP/IP篇)

前言

了解TCP/IP五层模型,探究从URL输入到返回到底经历了什么,这篇文件比长 你会从中了解到关于五层模型、MACARP、三次握手、四次挥手等知识

TCP/IP五层模型

物理层

电脑的传输介质,传输二进制(0 1)电气信号

链路层

确定0和1的分组方式 主要为以太网

以太网协议

一组电信号构成一个数据包叫做帧,每一帧分成两个部分:

  1. 标头(Head)
  2. 数据(Data)

image.png

标头(Head)包含数据包的一些说明项,比如发送者、接收者、目标MAC数据类型等等

数据(Data)则是数据包的具体内容。

MAC地址

MAC地址及物理网卡的地址,由12个16进制数表示例:00-B0-D0-86-AA-F7
前6个16进制数是生产厂商编号后6位是厂商流水号,每个网卡的MAC都是独一无二的

作用:通过MAC地址将数据包送到该子网络中的目标网卡

网络层

网络层的由来

互联网是由无数子组成的巨型网络而以太网依靠MAC地址发送数据,非同个子网络无法传输数据,
需要区分MAC是否是同个子网从而使用不同方式发送(广播、路由方式)

image.png

如何区分目标是否在同个子网?

使用子网掩码与本机IP做二进制AND运算(两个数位都为1,结果为1,否则为0),再使用子网掩码与目标IP做AND运算,两个结果一样则在一个子网反之则不在】

例:访问google IP 172.194.72.105, 已知本机子网掩码是255.255.255.0,本机用它对自己的IP地址192.168.1.100,做AND运算,计算结果为192.168.1.0,再对Google的IP地址172.194.72.105也做一个AND运算,计算结果为172.194.72.0,结果不一致

广播(在同个子网)

数据包的目标地址是对方的MAC加对方IP

将数据包发送到本网络下所有的计算机,每台计算机从以太网标头拿到目标MAC地址与自身做比较 一致则接收,

image.png

缺点:

  • 目标必须在同个子网络下
  • 无法得知目标是否接受成功
  • 同个子网下都会接受到包,资源浪费 效率低

这里目标的MAC从何得到的?使用ARP(后续网络层中会讲)

路由转发(不在同个子网)

此时数据包的目标地址是网关的MAC加对方IP

image.png

网址作用

通过路由选择算法为分组通过通信子网选择最适当的路径,分组超过了协议数据单元允许的长度,则源节点的网络层就要对该分组进行分片

IP协议

规定网络地址的协议叫做IP协议,它所定义的地址就被称为IP地址

作用:

  1. 为每一台计算机分配IP地址
  2. 确定哪些地址在同一个子网络

IPv4 网络地址由32个二进制位组成。

image.png

子网掩码

作用: 判断任意两个IP地址是否处在同一个子网络

判断步骤:将两个IP地址与子网掩码分别进行AND运算(两个数位都为1,运算结果为1,否则为0),然后比较结果是否相同,如果是的话,就表明它们在同一个子网络中,否则就不是

IP数据包

IP数据包也分为标头数据两个部分

标头部分主要包括版本、长度、IP地址等信息,数据部分则是IP数据包的具体内容

image.png

再将其插入以太网数据包后

image.png

ARP协议

作用:根据IP地址获取物理地址的一个TCP/IP协议

步骤:

  1. 在自己的本地ARP缓存中检查目标IP的匹配MAC地址,有则返回
  2. 请求帧广播到本地网络上的所有主机,包含要查询主机的IP地址,在对方MAC这栏填的是FF:FF:FF:FF:FF:FF,表示这是一个广播地址
  3. 子网络的所有主机接受这个数据包,取出IP与自身比对, 相同则告诉对方自己的MAC地址反之则丢弃
  4. 拿到IPMAC地址映射更新ARP缓存

传输层

作用:提供应用程序间的通信(区分数据是给主机上哪个程序的),主要是UDP和TCP协议

方法:每个数据包都发到主机的特定端口,所有不同的程序就能取到自己所需要的数据

UDP协议

UDP数据包,也是由标头数据两部分组成,相当于广播方式 一旦数据包发出,无法知道对方是否收到,传输数据是不可靠的

标头部分主要定义了发出端口和接收端口,数据部分就是具体的内容。然后把整个UDP数据包放入IP数据包的数据部分

image.png

TCP

它就是有确认机制的UDP协议,每发出一个数据包都要求确认,如果有一个数据包遗失,就收不到确认,发出方就知道有必要重发这个数据包了

TCP数据包和UDP数据包一样,都是内嵌在IP数据包的”数据”部分,TCP数据包没有长度限制

在将TCPUDP数据包入IP数据包后

image.png

  • 以太网标头设置发出方(本机)的MAC地址和接收方(DHCP服务器)的MAC地址,前者就是本机网卡的MAC地址,后者这时不知道就填入一个广播地址:FF-FF-FF-FF-FF-FF
  • IP标头设置发出方的IP地址和接收方的IP地址。这时对于这两者,本机都不知道,于是发出方的IP地址就设为0.0.0.0,接收方的IP地址设为255.255.255.255
  • TCP标头设置发出方的端口和接收方的端口,这一部分是DHCP协议规定好的,发出方是68端口,接收方是67端口

三次握手

  • 第一次握手:建立连接时,客户端发送syn包(syn=x)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
  • 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;
  • 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手

image.png

状态码

  • URG:紧急指针是否有效,为1表示某一位需要被优先处理
  • ACK:确认号是否有效,一般置为1
  • PSH:提示接收端应用程序立即从TCP缓冲区把数据读走
  • RST:对方要求重新建立连接,复位。
  • SYN:请求建立连接,并在其序列号的字段进行序列号的初始值设定 建立连接,设置为1
  • FIN:希望断开连接。

四次挥手

  1. 客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部FIN=1 其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时 客户端进入FIN-WAIT-1(终止等待1)状态
  2. 服务器收到连接释放报文,发出确认报文 ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服 务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间
  3. 客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)
  4. 服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认
  5. 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态
  6. 服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些

image.png

应用层

作用: 为不同应用程序规定不同的数据格式

举例来说TCP协议可以为各种各样的程序传递数据,比如Email、WWW、FTP等等,那么必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了应用层

结尾

到这我们了解TCP/IP中基本结构以及MAC解析 数据传递的知识,下一篇将分析URL输入到返回的具体步骤

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYAXa6xZ' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片