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连接与断开
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如何实现可靠性?
- 准确:连接管理(三次握手四次挥手)
- 安全:数据校验、确认应答、超时重传
- 迅速:流量控制
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