NOTE

7.1 计算机网络

1. OSI七层体系结构 由下至上是: - 物理层 在传输媒体上传输bit流 - 数据链路层 在相邻的机器节点之间传输帧 - 网络层 网络上的主机到主机之间传输数据 - 传输层 主机上的进程到进程之间传输数据 - 会话层 建立、管理和终止会话 - 表示层 数据的转换、加密和压缩 - 应用层 用户就是通过网络应用程序访问网络资源

计算机网络创建于 更新于 约 2 分钟读完historical

这是历史学习笔记,可能存在过时或不完整的理解。

1. OSI七层体系结构

由下至上是:

  • 物理层 在传输媒体上传输bit流

  • 数据链路层 在相邻的机器节点之间传输帧

  • 网络层 网络上的主机到主机之间传输数据

  • 传输层 主机上的进程到进程之间传输数据

  • 会话层 建立、管理和终止会话

  • 表示层 数据的转换、加密和压缩

  • 应用层 用户就是通过网络应用程序访问网络资源

2. TCP/IP四层协议体系结构

由下至上是:

2.1. 七层 vs 四层

  • 四层模型的数据链路层分为物理层+数据链路层
  • 四层模型的应用层分为会话层+表示层+应用层

2.2. 典型协议

3. 网络传输流程

3.1. 应用层

  • 应用层属于用户区
  • 执行exec 8<> /dev/tcp/www.baidu.com/80会在/proc/$$/fd下新建一个fd,这个fd是8指向的是个socket
  • 然后执行echo -e "GET /HTTP/1.0\n" 1>& 8可以发送数据给百度
  • 最后通过cat 0<& 8收到百度的数据

3.2. 传输层

  • 传输层及其下面的属于内核区
  • 传输层先要建立连接,传输数据完毕后需要断开连接。连接需要三次握手四次挥手,可以使用tcpdump -nn -i eth0 port 80抓包
  • 建立的连接可以通过netstat -antp查看建立的连接,从这个命令也可以看出一般都是一个进程或者说是线程对应一个连接,可不可以一个进程对应多个连接呢?可以的,使用IO多路复用
  • socket是由(IP1,Port1,IP2,Port2)组成的。那么问题来了,如果127.0.0.1:5555与www.baidu.com:80建立了连接,127.0.0.1:5555还能不能跟www.google.com:80建立连接呢–可以的

3.3. 网络层

  • 通过vim /etc/sysconfig/network-scripts/ifcfg-eth0可以配置网络,重要的有四个维度
IP地址
子网掩码
网关
DNS
  • 这四个维度可以从route -n打印出来的路由表观察,路由表用来解决下一跳往哪的问题
  • ping不ping得通也是通过路由表实现的,先是用目标IP跟Genmask相与,结果跟Destination相等的话,就可以把包发往Gateway

3.4. 链路层

  • 局域网内包的传输则是通过arp表实现的,可以通过arp -a打印

4. 参考

讨论

使用 GitHub 账号参与讨论,评论会保存在 GitHub Issues 中。在 GitHub 查看