TCP/IP原型
DARPA一个项目,逐渐演变而来的。
端口号
0~1023:管理员才有权限使用,永久地分配给某应用使用;
注册端口:
1024~41951:只有一部分被注册,分配原则上非特别严格;
动态端口或私有端口:
41952+:
/proc/sys/net/ipv4/ip_local_port_range:内核参数定义两个数字,表示可以做为临时端口的起始数字和结束数字。
套接字类型:
tcp socket TCP传输数据协议、 SCTP流控制传输协议
udp socket UDP用户数据报协议 DCCP
raw socket 裸套接字 不通过TCP和UDP等协议直接由应用层的程序直接到达网络层由ipv4 ipv6封装传输
TCP协议的功能:
①连接建立
②将数据打包成段 MTU通常为1500以下
校验和
③确认、重传以及超时机制
④排序
序列号 32位 并非从0开始 过大的话循环轮换 从0开始
⑤流量控制 速度不同步2台数据的服务器 防止阻塞
缓冲区 发送缓冲 接收缓冲
滑动窗口
⑥拥塞控制 多个进程通信
慢启动 通过慢启动的方式探测,启动的时候很小 随后以指数级增长。
拥塞避免算法
RFC:请求注解文档,起草定义这个协议的组织定义这个协议实现的过程等。
socket: IPC的一种实现,用于同一或不同主机上的进程间的通信;
socket通信在domain中实现:
识别一个socket的方法(socket地址格式)
Domain:
Unix Domain: 基于socket机制实现同一主机不同进程间通信的一种方式;AF_UNIX, AF_LOCAL,地址是一个路径名(文件) 同一主机通过内核中一个文件直接传输,而不需要通过协议栈传输。
IPv4 Domain: AF_INET, 基于socket机制借助于ipv4协议实现不同主机(也可以是同一主机)上的进程间通信的机制; 地址是32位的ipv4地址+16位的端口号。
IPv6 Domain: AF_INET6, 地址是128位的Ipv6地址+16位的端口号
socket的类型:
TCP:流式socket,SOCK_STREAM
可靠、双向、面向字节流
UDP:数据报式socket, SOCK_DGRAM
相关的系统调用:
socket(): 创建一个新的socket
bind():绑定于一个套接字地址上;
listen(): 监听套接字;
accept(): 接收连接请求;
connect(): 发起连接请求;
close(): 关闭连接
read()和write(): recv(), send(), recvfrom(), sendto()
tcp协议通过tcp状态来标记当前处于通信过程的哪个阶段:
CLOSED, LISTEN, SYN_SENT, SYN_RECV, ESTABLISHED, FIN_WAIT1, CLOSE_WAIT, FIN_WAIT2, LAST_ACK, TIME_WAIT, CLOSED