你需要知道的TCP/IP

前言TCP/IP 协议是网络通信的基石,TCP/IP协议不是只有 TCP 和 IP 协议,它是整个网络通信中所有协议的简称 。
维基百科:TCP/IP协议簇
维基百科:OSI模型
# TCP/IP 参考模型维基百科https://zh.wikipedia.org/wiki/TCP/IP%E5%8D%8F%E8%AE%AE%E6%97%8F# OIS 参考模型维基百科https://zh.wikipedia.org/wiki/OSI%E6%A8%A1%E5%9E%8B

你需要知道的TCP/IP

文章插图
OSI 参考模型
图片来自 《图解 TCP/IP 与 OSI 参考模型》 中 TCP/IP 协议分层模型
OSI 参考模型 (七层)是个理论模型,实际我们用的是 TCP/IP (四层)模型 。不过我们可以通过 OSI 参考模型来学习 TCP/IP 模型 。
应用层:应用程序通信细节的协议,比如常用的 HTTP 。
传输层:主要是负责两个节点之间数据传输,通信标识是 port 端口号 。
网络层:地址管理和路由选择,在两点之间找到一条最佳的通信路线,通信标识是 IP
数据链路层:负责物理层面链接的通信(同一个网段内) 。也就是局域网中通过交换机链接的节点 。通信标识是 mac 地址,网卡出厂自带的标识 。
物理层:将链路层的数据帧(字节流)转换为电压或光信号传播 。
网络通信可以做什么呢?
redisson (一个操作 redis 的 JAVA 库),就是使用的 netty 来做网络通信连接 redis 服务的 。
微服务中的服务发现和通信,就需要你熟悉网络通信 。
你要是在通信行业,那就不是了解了,你连协议的规范都得很清楚,不然路由器你都整不出来,还说什么 5G。
作为一个 Java 后端开发,主要是开发偏应用层面的程序,离底层相对比较远,熟练掌握即可,如果以后做通信行业的时候,你也一定会进一步学习的相关细节的 。
TCP/IP 你不了解,也不会有多大问题,CRUD 还是没有问题的 。但是你了解了之后,日常开发定位和解决问题方面有很大助力,总之学习 TCP/IP 是一个重要不紧急的事情,根据自己目标和层次安排 。
本文内容
  • 局域网中各节点怎么通信
  • 介绍 IP,ICMP,ARP 协议在网络层的作用及路由表的作用,及网段划分,子网掩码、网关的作用
  • 介绍交换机和路由器的作用
  • 介绍 TCP/IP 三次握手和四次挥手,TCP 中通信状态的作用,滑动窗口
  • 介绍 tcp 包格式,ip 包格式,链路层 帧 数据格式
交换机与路由器交换机 
你需要知道的TCP/IP

文章插图
交换机
交换机上有多个端口(不是 port)供计算机连接,交换机会维护端口与连接这个端口的 PC 的 Mac 地址映射表 。当交换机接受到数据的时候,会根据数据包的目的 Mac 地址,发送到交换机上对应的端口上,然后经过网线发送到目的 PC 。
交换机连接多个电脑组成一个局域网,交换机连接交换机又可以组成一个更大的局域网 。
比如 A、B 交换机各有 100 个端口,A 链接了 99 个PC,然后 B 交换机链接99 个,再将其中的一个端口 A/B 之间相互连接组成一个更大的局域网 。
路由器路由器工作在网络层,主要用于将一个网段数据包转发到另一个网段内 。路由器上也会有个几个 LAN 口 (Local Area Network,局域网),用于建立局域网 。还会有一个 WAN(Wide Area Network,广域网),连接运营商的网络 。
路由器也具有交换机的功能,只是 LAN 口 比较少,可以接入的电脑比较少 。
当 PC 或者 手机 连接无线路由器时也会给 PC 分配一个局域网 IP,子网掩码,网关等 。
我住的地方的网络拓扑图如下:
你需要知道的TCP/IP

文章插图
 
当手机与电脑通信的时候,实际通过 LAN 口走局域网通信 。
当手机访问 维基百科 时,实际是通过路由器跳入到光猫网段,再通过光猫跳入到小区运营商的网络,然后经过多个网络节点连接到维基百科的服务器上 。
只要需要有 IP 地址的设备(光猫,路由器,PC,手机)都需要有网卡,网卡出厂自带有 Mac 地址 。IP 和 Mac 地址的作用后文中会介绍 。
你需要知道的TCP/IP

文章插图
 
交互机和路由器的区别这部分内容是我自己的理解,我没有在网上找到资料佐证,请谨慎对待
其实交换机和路由器硬件差别不大,只是硬件上的软件决定了它能做什么 。
2 层交换机上的软件(只有数据链路层)可能只做解析帧,拿到 mac 地址,然后查找当前交换机的端口对应的 mac 地址,然后从对应的端口传递过去 。


推荐阅读