Linux系统编程10(Socket编程1-概念)
1.套接字
1.1 什么是socket
- socket是一个编程接口
- socket是一种特殊的文件描述符
everything in Unix is a file1.2 协议域domain
No. | 参数 | 含义 |
---|---|---|
1 | AF_INET |
IPv4 |
2 | AF_INET6 |
IPv6 |
3 | AF_LOCAL |
Unix域 |
No. | 类型 | Type | 作用 | 说明 |
---|---|---|---|---|
1 | 流式套接字 | SOCK_STREAM |
提供面向连接、可靠的数据传输服务,数据按字节流、按顺序收发,保证在传输过程中无丢失、无冗余。 | TCP协议支持该套接字。 |
2 | 数据报套接字 | SOCK_DGRAM |
提供面向无连接的服务,数据收发无序,不能保证数据的准确到达。 | UDP协议支持该套接字。 |
3 | 原始套接字 | SOCK_RAW |
允许对低于传输层的协议或物理网络直接访问 | 常用于检测新的协议 |
No. | 类型 | 作用 |
---|---|---|
1 | 流式套接字(SOCK_STREAM) | 提供了一个面向连接,可靠的数据传输服务,数据无差错,无重复的发送且按发送顺序接收。内设置流量控制,避免数据流淹没慢的接收方。数据被看作是字节流,无长度限制 |
2 | 数据报套接字(SOCK_DGRAM) | 提供无连接服务。数据包以独立数据包的形式被发送,不提供无差错保证,数据可能丢失或重复,顺序发送,可能乱序接收 |
4 | 原始套接字(SOCK_RAW) | 可以对较低层次协议如IP,ICMP直接访问 |
No. | 参数 | 含义 |
---|---|---|
1 | IPPROTO_TCP |
TCP |
2 | IPPROTO_UDP |
UDP |
- 协议
- 本地地址
- 本地端口
- 远程地址
- 远程端口
- 概念
接头暗号
特点 | 数据传输方式 | 类比 |
---|---|---|
面向连接 | 数据流 | 大巴车(人满发车,定点发车),打电话(确保信息准确送达) |
- 作用
通信双方必须互相确定对方的存在
- TCP连接与断开
文章图片
TCP连接与断开
- 三次握手
文章图片
三次握手
文章图片
三次握手
- 四次挥手
文章图片
四次挥手
- 报文标识
No. | 报文标识 | 英文 | 含义 |
---|---|---|---|
1 | SYN | synchronous | 建立连接 |
2 | ACK | acknowledgement | 确认 |
3 | FIN | finish | 结束 |
4 | PSH | push | 传送 |
5 | RST | reset | 重置 |
6 | URG | urgent紧急 |
- 号码
No. | 英文 | 含义 |
---|---|---|
1 | Sequence number | 顺序号码 |
2 | Acknowledge number | 确认号码 |
- 应用
数据完整性要求高
数据可靠性要求高
传输性能要求低
2.2 UDP(User Datagram Protocol)
特点 | 数据传输方式 | 类比 |
---|---|---|
无连接 | 数据报 | 出租车(随到随走),发短信(不是关心对方马上收到) |
- 分类
No. | 分类 | 举例 |
---|---|---|
1 | 单播(unicast) | 私聊,爱奇艺视频 |
2 | 广播(broadcast) | 广告,病毒 |
3 | 多播/组播(multicast) | 群聊,春晚直播 |
文章图片
- 区别
文章图片
3.路径 3.1 IP(Internet中主机的标识)
3.1.1 分类 32位(IPV4)/128位(IPV6)
3.1.2 表示形式(常用点分形式)
No. | 协议 | 形式 | e.g. |
---|---|---|---|
1 | IPv4 | 点分十进制 | 192.168.0.1 |
2 | IPv6 | 点分十进制 | ::192.168.0.1 |
3 | IPv6 | 点分十六进制 | ::C0A8:0001 |
No. | IP地址 | 地址类型 | 作用 |
---|---|---|---|
1 | 0.0.0.0 |
通配地址 | 主机上所有IP,多网卡共用 |
2 | 127.0.0.1 |
回环地址 | 本地虚拟接口,无网卡可用,检查本地网络协议 |
3 | 255.255.255.255 |
广播地址 | 受限广播地址,当前路由器均不转发此类广播 |
4 | XXX.XXX.XXX.255 |
广播地址 | 子网广播地址 |
5 | XXX.XXX.255.255 |
广播地址 | 全子网广播 |
6 | 224.0.0.0 ~239.255.255.255 |
组播地址 | 详细参见组播地址分类 |
- 组播地址分类
No. | 范围 | 名称 | 作用 |
---|---|---|---|
1 | 224.0.0.0~224.0.0.255 | 链路组播地址 | 路由协议和其它用途保留的地址 |
2 | 224.0.1.0~238.255.255.255 | 用户组播地址 | 用于全球范围(如Internet)或网络协议 |
3 | 239.0.0.0~239.255.255.255 | 本地组播地址 | 内部使用 |
电话号码与人名
IP与域名
3.2 端口(区分一台主机接收到的数据包应该转交给哪个进程来进行处理)
查看端口
netstat –apn
3.3 类比
- 火车站与站台
- 飞机场与登机口
- 公司与办公室
- 银行与窗口柜台
- IP与端口
No. | 类型 | 简写 | 本质 | e.g. |
---|---|---|---|---|
1 | 大端 | BE(big endian) | 将高序字节存储在起始地址 | IBM、网络 |
2 | 小端 | LE(little endian) | 将低序字节存储在起始地址 | Intel |
【Linux系统编程10(Socket编程1-概念)】查看当前CPU支持的字节序:lscpu
推荐阅读
- 如何在Mac中的文件选择框中打开系统隐藏文件夹
- Linux下面如何查看tomcat已经使用多少线程
- 单点登陆
- Beego打包部署到Linux
- 操作系统|[译]从内部了解现代浏览器(1)
- 游乐园系统,助力游乐园管理
- 中国MES系统软件随工业化成长
- python青少年编程比赛_第十一届蓝桥杯大赛青少年创意编程组比赛细则
- 推荐系统论文进阶|CTR预估 论文精读(十一)--Deep Interest Evolution Network(DIEN)
- Cesium|Cesium 粒子系统学习