协议
一组规则
典型协议
- 传输层常见协议有TCP、UDP 协议。
- 应用层常见的协议有HTTP协议,FTP 协议。
- 网络层常见协议有IP协议、ICMP协议、IGMP协议。
- 网络接口层常见协议有 ARP 协议、RARP 协议。
TCP传输控制协议(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
UDP用户数据报协议(User Datagram Protocol)是 OS参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。
HTTP 超文本传输协议(Hyper Text Transfer Protocol)是互联网上应用最为广泛的一种网络协议。
FTP 文件传输协议(FileTransfer Protocol)
IP协议是因特网互联协议(InternetProtocol)华
ICMP 协议是 Internet控制报文协议(Internet Control Message Protocol)它是TCP/IP协议族的一个子协议,用于在IP 主机、路由器之间传递控制消息。
IGMP 协议是 Internet 组管理协议(Internet Group Management Protocol),是因特网协议家族中的一个组播协议。该协议运行在主机和组播路由器之间。
ARP协议是正向地址解析协议(Address Resolution Protocol),通过已知的IP,寻找对应主机的 MAC地址。
RARP 是反向地址转换协议,通过MAC地址确定IP地址。
分层模型
OSI七层模型
物理层 数据链路层 网络层 传输层 会话层 表示层 应用层
TCP/IP协议
网络接口层(链路层) 网络层 传输层 应用层
C/S模型
客户端-服务器模型
- 优点:缓存大量数据、可以自定义协议、速度快、应用程序迭代更新更方便、
- 缺点:安全性、需要安装、开发工作量大
B/S模型
浏览器-服务器模型
- 优点:安全性高、跨平台、开发工作量小
- 缺点:不能缓存大量数据、严格遵守HTTP协议、
网络通信过程
数据没有封装之前,不能在网络中进行传输
IP地址:可以在网络中,唯一标识一台主机
端口号:可以在网络的一台主机上,唯一标识一个进程
IP+端口号:可以在网络中,唯一标识一个进程
- 以太网帧协议:
ARP协议:根据IP地址获取mac地址
以太网帧协议:根据mac地址,完成数据包传输 - IP协议
版本:IPv4 IPv6
TTL:time to live 数据包跳转上限
源IP/目的IP:32位 —— 4字节 - UDP
源端口号:16位 2^16=65536
目的端口号:16位 - TCP
源端口号:16位
目的端口号:16位
序号:32位
确认序号:32位
标志位:6个
窗口大小:16位
TCP协议
TCP数据报格式
TCP三次握手、四次挥手
滑动窗口(流量控制)
设置一个滑动窗口,满则阻塞,保证文件传输不会丢失
TCP状态转换图
实线:客户端正常状态变迁
虚线:服务器正常状态变迁
- 主动发起连接:CLOSE —— 发送SYN —— SEND_SYN —— 接收ACK、SYN —— SEND_SYN —— 发送ACK ——ESTABLISHED(数据通信态)
- 主动关闭连接:ESTABLISHED(数据通信态) —— 发送FIN —— FIN_WAIT_1 —— 接收ACK —— FIN_WAIT_2(半关闭) —— 接收对端发送FIN —— FIN_WAIT_2(半关闭) —— 回发ACK —— TIME_WAIT等2MSL时长(只有主动关闭连接方,会经历该状态)—— CLOSE
- 被动建立连接:CLOSE —— LISTEN —— 接收SYN —— LISTEN —— 发送SYN、ACK —— SYN_RCVD —— 接收ACK —— ESTABLISHED(数据通信态)
- 被动关闭连接:ESTABLISHED(数据通信态) —— 接收FIN —— ESTABLISHED —— 发送ACK —— CLOSE_WAIT(对方处于半关闭) —— 发送FIN —— LAST_ACK —— 接收ACK —— CLOSE
2MSL时长作用:为了保证最后一个ACK能被对端接收,若等待期间对方未收到,对端会再次发生FIN请求。所以2MSL一定出现在【主动关闭请求】一端
端口复用
int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);
参数:
sockfd:要设置的套接字描述符
level:选择定义层次
SOL_SOCKET:通用套接字
optname:选项名。
SO_REUSEADDR:端口复用
optval:指向某个变量的指针,该变量是要设置新值的缓冲区。
int opt=1
(void*)&opt
optlen:optval的长度
返回值:
成功:0
失败:1
端口复用示例:
int opt=1;
setsockopt(cfd,SOL_SOCKET,SO_REUSEADDR,(void*)&opt,sizeof(opt));
int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);
TCP和UDP的优缺点
TCP | UDP |
---|---|
面向连接的,可靠数据报传输 | 无连接的,不可靠的数据报传递 |
对于不稳定的网络层,采用完全弥补的通信方式。丢包重传 | 对于不稳定的网络层,采用不完全弥补的通信方式。默认还原网络状况 |
数据流量稳定、速度稳定、顺序稳定 | 不稳定 |
传输速度慢,效率低,系统资源开销大 | 传输速度快,效率高,系统资源开销小 |
对数据完整性要求较高,不追求效率,选择TCP(大数据传输、文件传输) | 对时效性要求较高的场合,选择UDP(游戏、视频会议) |