Linux高性能服务器编程|阅读笔记:第1章 - TCP/IP协议族
简介
Hello!
非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~
ଘ(੭ˊᵕˋ)੭
昵称:海轰
标签:程序猿|C++选手|学生
简介:因C语言结识编程,随后转入计算机专业,获得过国家奖学金,有幸在竞赛中拿过一些国奖、省奖…已保研
学习经验:扎实基础 + 多做笔记 + 多敲代码 + 多思考 + 学好英语!
唯有努力💪
本文仅记录自己感兴趣的内容
1.1 TCP/IP协议族体系结构以及主要协议
TCP/IP协议族:四层系统系统
- 数据链路层
- 网络层
- 传输层
- 应用层
1.1.1 数据链路层
数据链路层中常用的协议:
- ARP协议:地址解析
- RARP协议:逆地址解析
IP地址与机器mac地址之间的转化
网络层
作用:实现数据包的选路与转发
常用的协议:
- IP协议
- ICMP协议:用于检测网络连接
ICMP协议报文结构:
解释:
- 8位类型:区分报文类型,ICMP报文分为两类
- 差错报文:回应网络错误,比如目标不可达或重定向
- 查询报文: 查询网络信息,例如ping
- 8位代码:进一步细分不同的条件
1.1.3 传输层
作用:为两台主机上的应用程序提供端到端的通信
传输层和网络层的区别:
常用的协议:
- TCP协议
- UDP协议
- SCTP协议:一种相对较新的传输层协议,为了在因特网上传输电话信号而设计(简单了解即可)
1.1.4 应用层
作用:负责处理应用程序的逻辑
常用的协议:
- telent:远程登录协议
- OSPF:开放最短路径优先,动态路由更新协议,用于路由器之间的通信,以告知对方各自的路有信息
- DNS协议
1.2 封装
各层协议之间的数据封装
TCP报文段封装过程:
1.3 分用
分用概念:当帧到达目的主机时,将沿着协议栈自底向上依次传递。各层协议依次处理帧中本层负 责的头部数据,以获取所需的信息,并最终将处理后的帧交给目标应用程序。这个过程称为 分用(demultiplexing)。
分用是依靠头部信息中的类型字段实现的
标准文档RFC1700定义 了所有标识上层协议的类型字段以及每个上层协议对应的数值
以太网帧的分用过程:
1.4 测试网络
文中准备了一个测试网络,用于网络测试
1.5 ARP协议工作原理
作用:实现任意网络层地址到任意物理层地址的转换
工作原理:主机向自己所在的网络广播一个ARP请求,该请求包含目标机器的网络地址。此网络上的其他机器都将收到这个请求,但只有被请求的目标机器会回应一个ARP应答,其中包含自己的物理地址。
1.6 DNS工作原理
…(略)
1.7 socket和TCP/IP协议栈的关系
背景:数据链路、网络、传输层协议是在内核中实现的,因此在操作系统中需要实现一组系统调用,使得应用程序能够访问这些协议提供的服务
通俗理解:这些协议都是在内核中实现,在应用程序(用户态)中我们是无法直接使用这些协议的,这时需要一个工具来调用操作系统内核中的这些协议,这个工具就可以理解为socket
socket提供的功能:
- 将应用程序数据从用户缓冲区复制到TCP/UDP内核发送缓冲区(用户态 -> 内核态),以交付内核来发送数据,比如send函数;或是从内核TCP/UDP接收缓冲区中复制数据到用户缓冲区,以读取数据(内核态 -> 用户态)
- 应用程序可以通过它们(socket提供的一些API)来修改内核中各层协议的某些头部信息或其他数据结构,从而精细地控制底层通信的行为
结语
参考书籍:《Linux高性能服务器编程》
文章仅作为个人学习笔记记录,记录从0到1的一个过程
希望对您有一点点帮助,如有错误欢迎小伙伴指正
- 点赞
- 收藏
- 关注作者
评论(0)