1.套接字
1.1 什么是socket
- socket是一个编程接口
- socket是一种特殊的文件描述符
everything in Unix is a file
1.2 协议域domain
No. | 参数 | 含义 |
---|---|---|
1 | AF_INET |
IPv4 |
2 | AF_INET6 |
IPv6 |
3 | AF_LOCAL |
Unix域 |
1.3 类型type
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直接访问 |
1.4 协议protocol
No. | 参数 | 含义 |
---|---|---|
1 | IPPROTO_TCP |
TCP |
2 | IPPROTO_UDP |
UDP |
1.5 五要素
- 协议
- 本地地址
- 本地端口
- 远程地址
- 远程端口
2.协议
- 概念
接头暗号
2.1 TCP(Transmission Control Protocol)
特点 | 数据传输方式 | 类比 |
---|---|---|
面向连接 | 数据流 | 大巴车(人满发车,定点发车),打电话(确保信息准确送达) |
2.1.1 三次握手/四次挥手
作用
通信双方必须互相确定对方的存在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 | 确认号码 |
序列号是一个32位(bit)的随机数。用来保证传送数据包的顺序。
《TCP/IP详解 卷1:协议》
如何确保数据没有损坏?
数据校验:校验和(发送的数据包的二进制相加然后取反)
如何确保数据发送过去了?
确认应答:接收方收到报文会发送确认。
超时重传:发送方发送一段时间后没收到确认会重新发送。
如何确保数据及时到达?
流量控制:当接收方来不及处理发送过来的数据,能提示发送方降低发送的速率,防止包丢失。
拥塞控制:当网络拥塞时,发送方会减少数据的发送。
- 应用
下载文件
数据完整性要求高
数据可靠性要求高
传输性能要求低
TCP如何实现可靠性?
- 准确:连接管理(三次握手四次挥手)
- 安全:数据校验、确认应答、超时重传
- 迅速:流量控制
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 |
3.1.3 特例
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 | 本地组播地址 | 内部使用 |
3.1.4 域名
DNS(Domain Name System,域名系统),作为域名和IP地址相互映射的一个分布式数据库。
电话号码与人名
IP与域名
3.2 端口(区分一台主机接收到的数据包应该转交给哪个进程来进行处理)
查看端口
netstat –apn
3.3 类比
- 火车站与站台
- 飞机场与登机口
- 公司与办公室
- 银行与窗口柜台
- IP与端口
4.字节序
No. | 类型 | 简写 | 本质 | e.g. |
---|---|---|---|---|
1 | 大端 | BE(big endian) | 将高序字节存储在起始地址 | IBM、网络 |
2 | 小端 | LE(little endian) | 将低序字节存储在起始地址 | Intel |
查看当前CPU支持的字节序:
lscpu