网络协议学习(一)

1.网络模型

  • OSI 七层模型
    网络协议学习(一)_第1张图片
  • TCP/IP 五层模型
    网络协议学习(一)_第2张图片
    这里做一个不恰当的比喻:物理层就像是电脑的网卡,链路层就好比是网卡驱动程序,网络就是电脑的ip,传输层就是tcp、udp,应用层就是自己编写的网络应用程序

2.TCP/IP 网络传输中的数据

  • 每一层通过约定与协作,完成数据端到端传输
    网络协议学习(一)_第3张图片
    网络协议学习(一)_第4张图片

3.地址和端口号

  • MAC 地址:MAC 地址全称叫做媒体访问控制地址,也称为局域网地址(LAN Address),MAC 位址, 以太网地址(Ethernet Address)或物理地址(Physical Address),由网络设备制造商生产时 写在硬件内部。MAC 地址与网络无关,也即无论将带有这个地址的硬件(如网卡、集线器、 路由器等)接入到网络的何处,都有相同的 MAC 地址
    网络协议学习(一)_第5张图片
    网络协议学习(一)_第6张图片

  • IP地址:IP 地址(Internet Protocol Address)的全称叫作互联网协议地址,它的本义是为互联网 上的每一个网络和每一台主机配置一个唯一的逻辑地址,用来与物理地址作区分

  • IP地址和 MAC地址之间的区别
    这里只是简要描述,它们的区别点有很多。
    1.对于网络中的一些设备,路由器或者是 PC机而言, IP地址的设计是出于拓扑设计出来的,只要在不重复 IP地址的情况下,它是可以随意更改的;而 MAC地址是根据生产厂商烧录好的,它一般不能改动的,一般来说,当一台 PC机的网卡坏了之后,更换了网卡之后 MAC地址就会变了
    2.它们的寻址协议层不同。 IP地址应用于 OSI模型的网络层,而 MAC地址应用在 OSI 模型的数据链路层。 数据链路层协议可以使数据从一个节点传递到相同链路的另一个节点 上(通过 MAC 地址),而网络层协议使数据可以从一个网络传递到另一个网络上( ARP 根 据目的 IP 地 址 ,找 到 中 间 节 点 的 MAC 地 址 ,通 过 中 间 节 点 传 送 ,从 而 最 终 到 达 目 的 网 络 )。

  • 端口号:在传输层也有这种类似于地址的概念,那就是端口号。端口号用来识别同一台计算机中 进行通信的不同应用程序。因此,它也被称为程序地址; 一台计算机上同时可以运行多个程序。传输层协议正是利用这些端口号识别本机中正在 进行通信的应用程序,并准确地将数据传输。

  • 为什么端口号有 65535 个?
    ** 因为在 TCP、UDP 协议报文的开头,会分别有 16 位二进制来存储源端口号和目标端口 号,所以端口个数是 2^16=65536 个,但是 0 号端口用来表示所有端口,所以实际可用的端 口号是 65535 个

  • 观察端口号
    Windows 下使用 netstat -ano 查看所有端口号,netstat -ano|findstr “<端口号>”查看 指定端口号。
    Linux 下可以用 root 用户执行 lsof -i:端口号查看指定端口占用。

总结

  • 所以一般来说,不管计算机中有多少网卡,每个网卡都会有自己的 MAC 地址,这个 MAC 地址是不会变化的。而每个网卡在正常工作的情况下,都会有一个 IP 地址,这个 IP 地址完全是可以变化的。而这台计算机中承载的各种应用程序可以拥有自己的端口号,然后 通过服务器的网卡,正确地进行网络通信。
    一台服务器上的不同网络应用程序必须有不同的端口号,A 程序启动了使用了端口 x, B 程序启动就不能使用端口 x,否则会报错“Address already in use”。 总的来说,操作系统是通过源 IP 地址、目标 IP 地址、协议号(协议类型)、源端口号 以及目标端口号这五个元素唯一性的识别一个网络上的通信。
  • 一台主机上只能保持最多 65535 个 TCP 连接,对吗?
    答:肯定不对,网络连接通过五个要素确定唯一标识,TCP连接中,协议类型确定后,还有四要素影响着。

4.TCP 三次握手

所谓三次握手是指建立一个 TCP 连接时需要客户端和服务器端总共发送三个包以确认 连接的建立。在 socket 编程中,这一过程由客户端执行 connect 来触发,所以网络通信中, 发起连接的一方我们称为客户端,接收连接的一方我们称之为服务端。
网络协议学习(一)_第7张图片

  • 第一次握手:客户端将请求报文标志位SYN置为1,,请求报文的 Sequence Number 字段 (简称 seq)中填入一个随机值 J,将数据传给服务端后状态变为 SYN_SENT
  • 第二次握手:服务端收到数据包后由请求报文标志位SYN=1知道,客户端想建立连接,服务端将应答报文标志SYN 和 ACK 都置为1,应答报文的 Acknowledgment Number 字段(简称 ack)中填入 ack=J+1,应答报文的seq中随机填入一个K,将该数据包发送给客户端,状态变为SYN_RCVD
  • 第三次握手:客户端收到报文后检查ack是否为 J+1,ACK是否为1,如果正确则将报文标志位ACK置为1,ack=K+1.并将数据包发送服务端,服务器端检查ACK=1,ack=K+1则进入ESTABLISHED 状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。
  • 为什么 TCP握手需要三次 ?
    为了实现可靠数据传输, TCP 协议的通信双方,都必须维护一个序列号, 以标识发送 出去的数据包中,哪些是已经被对方收到的。
    就像上面三次握手所描述的,只有通过三次握手,客户端和服务器端才能分别知道对方发起的序列号得到了确认。
    三次握手的过程即是通信双方相互告知序列号起始值,并确认对方已经收到了序列号 起始值的必经步骤

  • TCP的三次握手的漏洞 -SYN洪泛攻击:第一次握手中的客户端 IP 地址是伪造的,从而服务端忙于进 行第二次握手,但是第二次握手是不会有应答的,所以导致服务器队列满,而拒绝连接。

5.TCP 四次挥手

网络协议学习(一)_第8张图片

  • 某个应用进程首先调用 close,我们称该端执行主动关闭(active close)。该端的 TCP 于是发送一个 FIN 分节,表示数据发送完毕,应用进程进入 FIN-WAIT-1(终止等待 1)状态。
  • 接收到这个 FIN 的对端执行被动关闭(passive close),发出确认报文。因为 FIN 的接 收意味着接收端应用进程在相应连接上再无额外数据可接收,接收端进入了 CLOSE-WAIT(关 闭等待)状态,这时候处于半关闭状态,即主动关闭端已经没有数据要发送了,但是被动关 闭端若发送数据,主动关闭端依然要接受。这个状态还要持续一段时间,也就是整个 CLOSE-WAIT 状态持续的时间。主动关闭端收到确认报文后进入 FIN-WAIT-2(终止等待 2)状 态。
  • 一段时间后,被动关闭的应用进程将调用 close 关闭它的套接字。这导致它的 TCP 也 发送一个 FIN,表示它也没数据需要发送了。
  • 接收这个最终 FIN 的原发送端 TCP(即执行主动关闭的那一端)确认这个 FIN 发出一 个确认 ACK 报文,并进入了 TIME-WAIT(时间等待)状态。注意此时 TCP 连接还没有释放, 必须经过 2∗MSL(最长报文段寿命/最长分节生命期 max segement lifetime,MSL 是任何 IP 数据报能够在因特网中存活的最长时间,任何 TCP 实现都必须为 MSL 选择一个值。RFC 1122[Braden 1989]的建议值是 2 分钟,不过源自 Berkelcy 的实现传统上改用 30 秒这个值。 这意味着 TIME_WAIT 状态的持续时间在 1 分钟到 4 分钟之间)的时间后,当主动关闭端撤 销相应的 TCB 后,才进入 CLOSED 状态。
  • 被动关闭端只要收到了客户端发出的确认,立即进入 CLOSED 状态。同样,撤销 TCB 后,就结束了这次的 TCP 连接。可以看到,被动关闭端结束 TCP 连接的时间要比主动关闭 端早一些
  • 为什么 TCP的挥手需要四次?
    TCP 是全双工的连接,必须两端同时关闭连接,连接才算真正关闭。 如果一方已经准备关闭写,但是它还可以读另一方发送的数据。发送给 FIN 结束报文给 对方,对方收到后,回复 ACK 报文。当这方也已经写完了准备关闭,发送 FIN 报文,对方回 复 ACK。两端都关闭,TCP 连接正常关闭。

你可能感兴趣的:(网络,学习)