文章目录
1. 套接字
socket 是一个编程接口
socket 是一种特殊的文件描述符
1.1 协议域 domain
参数 | 含义 |
---|---|
AF_INET | IPv4 |
AF_INET6 | IPv6 |
AF_LOCAL | Unix域 |
1.2 类型 type
类型 | Type | 作用 | 说明 |
---|---|---|---|
流式套接字 | SOCK_STREAM | 提供面向连接、可靠的数据传输服务,数据按字节流、按顺序收发,保证在传输过程中无丢失、无冗余。 | TCP 协议支持该套接字 |
数据报套接字 | SOCK_DGRAM | 提供面向无连接的服务,数据收发无序,不能保证数据的准确到达。 | UDP 协议支持该套接字 |
原始套接字 | SOCK_RAW | 允许对低于传输层的协议或物理网络直接访问 | 常用于检测新的协议 |
1.3 协议 protocol
参数 | 含义 |
---|---|
IPPROTO_TCP | TCP |
IPPROTO_UDP | UDP |
1.4 网络连接的5个要素
协议: TCP / UDP
本地地址: 本台电脑的IP地址
本地端口: 相对于网络上的其他计算机访问你的计算机时,你开放的端口
远程地址: 要连接其他电脑的IP地址
远程端口: 你访问网络上其他计算机时需要对方开放的端口
2. 协议
如同接头暗号
2.1 TCP (Transmission Control Protocol)
面向连接,数据流,如同大巴车(人满发车,定点发车),打电话(确保信息准确送达)
应用: 下载文件
数据完整性要求高
数据可靠性要求高
传输性能要求低
三次握手/四次挥手
作用: 通信双方必须互相确定对方的存在
报文标识:
报文标识 | 英文 | 含义 |
---|---|---|
YN | synchronous | 建立连接 |
ACK | acknowledgement | 确认 |
FIN | finish | 结束 |
PSH | push | 传送 |
RST | reset | 重置 |
URG | urgent | 紧急 |
序列号:
序列号是一个32位(bit)的随机数,用来保证传送数据包的顺序。
英文 | 含义 |
---|---|
Sequence number | 顺序号码 |
Acknowledge number | 确认号码 |
三次握手
四次挥手
返回的Ack码是对应Seq码+1
数据传送问题
如何确保数据没有损坏?
数据校验: 校验和(发送的数据包的二进制相加然后取反)
如何确保数据发送过去了?
确认应答: 接收方收到报文会发送确认。
超时重传: 发送方发送一段时间后没收到确认会重新发送。
如何确保数据及时到达?
流量控制: 当接收方来不及处理发送过来的数据,能提示发送方降低发送的速率,防止包丢失。
拥塞控制: 当网络拥塞时,发送方会减少数据的发送。
TCP 如何实现可靠性?
1. 准确: 连接管理(三次握手四次挥手)
2. 安全: 数据校验、确认应答、超时重传
3. 迅速: 流量控制
2.2 UDP (User Datagram Protocol)
无连接,数据报,如同出租车(随到随走),发短信(不是关心对方马上收到)
分类:
分类 | 举例 |
---|---|
单播(unicast) | 私聊,爱奇艺视频 |
广播(broadcast) | 广告,病毒 |
多播 / 组播(multicast) | 群聊,春晚直播 |
3. 路径
3.1 IP
Internet 中主机的标识
分类: 32位(IPV4) / 128位(IPV6)
表示形式:
协议 | 形式 | e.g. |
---|---|---|
IPv4 | 点分十进制 | 192.168.0.1 |
IPv6 | 点分十进制 | ::192.168.0.1 |
IPv6 | 点分十六进制 | ::C0A8:0001 |
特殊的IP地址:
IP地址 | 地址类型 | 作用 |
---|---|---|
0.0.0.0 | 通配地址 | 主机上所有IP,多网卡共用 |
127.0.0.1 | 回环地址 | 本地虚拟接口,无网卡可用,检查本地网络协议 |
255.255.255.255 | 广播地址 | 受限广播地址,当前路由器均不转发此类广播 |
XXX.XXX.XXX.255 | 广播地址 | 子网广播地址 |
XXX.XXX.255.255 | 广播地址 | 全子网广播 |
224.0.0.0 ~ 239.255.255.255 | 组播地址 | 详细参见组播地址分类 |
组播地址分类:
范围 | 名称 | 作用 |
---|---|---|
224.0.0.0 ~ 224.0.0.255 | 链路组播地址 | 路由协议和其它用途保留的地址 |
224.0.1.0 ~ 238.255.255.255 | 用户组播地址 | 用于全球范围(如Internet)或网络协议 |
239.0.0.0 ~ 239.255.255.255 | 本地组播地址 | 内部使用 |
域名: DNS(Domain Name System,域名系统),作为域名和IP地址相互映射的一个分布式数据库
3.2 端口
区分一台主机接收到的数据包应该转交给哪个进程来进行处理
查看端口: netstat –apn
类比于:火车站与站台、飞机场与登机口、公司与办公室、银行与窗口柜台、IP与端口
4. 字节序
类型 | 简写 | 本质 | e.g. |
---|---|---|---|
大端 | BE(big endian) | 将高序字节存储在起始地址 | IBM、网络 |
小端 | LE(little endian) | 将低序字节存储在起始地址 | Intel |
查看当前CPU支持的字节序: lscpu