传输层:提供进程地址
-
Port number:
tcp:传输控制协议,面向连接的协议;通信前需要建立虚拟链路;结束后拆除链路;
0-65535
udp:User Datagram Protocol,无连接的协议;
0-65535
-
IANA:
0-1023:众所周知,永久的分配给固定的应用使用,特权端口,22/tcp(ssh), 80/tcp(http), 443/tcp(https)
1024-41951:亦为注册端口,但要求并不是特别严格,分配给程序注册为某应用使用,11211/tcp, 11211/udp (memcached), 3306/tcp(mysql)
41952+:客户端程序随机使用的端口;动态端口,或私有端口;其范围的定义:/proc/sys/net/ipv4/ip_local_port_range
-
Socket: IPC的一种实现,允许位于不同主机(甚至同一主机)上不同进程之间进行通信;数据交换;Socket API, 1983年,4.2 BSD
SOCK_STREAM:tcp套接字
SOCK_DGRAM:udp套接字
SOCK_RAW: 裸套接字
-
IPv4:
A:1-127
B:128-191
C:192-223
D:组播,224-239
E:240-254
-
私有地址:
A:10.0.0.0/8
B:172.16.0.0/16-172.31.0.0/16
C:192.168.0.0/24-192.168.255.0/24
-
TCP协议的特性:
建立连接:三次握手
将数据打包成段:校验和(CRC-32)
确认、重传以及超时:
排序:逻辑序号
流量控制:滑动窗口算法
拥塞控制:慢启动和拥塞避免算法
-
Socket Domain(根据其所使用的地址):
AF_INET:Address Family,IPv4
AF_INET6:IPv6
AF_UNIX:同一主机上不同进程之间通信时使用;
每类套接字都至少提供了两种socket:流,数据报
流:可靠地传递、面向连接、无边界;
数据报:不可靠地传递、有边界、无连接
-
套接字相关的系统调用:
socket(): 创建一个套接字;
bind():绑定
listen():监听
accept():接收请求
connect():请求连接建立
write():发送
read():接收
send(), recv(), sendto(), recvfrom()