【Linux编程学习笔记】网络基础

协议

一组规则

典型协议

  • 传输层常见协议有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状态转换图

在这里插入图片描述
实线:客户端正常状态变迁
虚线:服务器正常状态变迁

  1. 主动发起连接:CLOSE —— 发送SYN —— SEND_SYN —— 接收ACK、SYN —— SEND_SYN —— 发送ACK ——ESTABLISHED(数据通信态)
  2. 主动关闭连接:ESTABLISHED(数据通信态) —— 发送FIN —— FIN_WAIT_1 —— 接收ACK —— FIN_WAIT_2(半关闭) —— 接收对端发送FIN —— FIN_WAIT_2(半关闭) —— 回发ACK —— TIME_WAIT等2MSL时长(只有主动关闭连接方,会经历该状态)—— CLOSE
  3. 被动建立连接:CLOSE —— LISTEN —— 接收SYN —— LISTEN —— 发送SYN、ACK —— SYN_RCVD —— 接收ACK —— ESTABLISHED(数据通信态)
  4. 被动关闭连接: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的优缺点

TCPUDP
面向连接的,可靠数据报传输无连接的,不可靠的数据报传递
对于不稳定的网络层,采用完全弥补的通信方式。丢包重传对于不稳定的网络层,采用不完全弥补的通信方式。默认还原网络状况
数据流量稳定、速度稳定、顺序稳定不稳定
传输速度慢,效率低,系统资源开销大传输速度快,效率高,系统资源开销小
对数据完整性要求较高,不追求效率,选择TCP(大数据传输、文件传输)对时效性要求较高的场合,选择UDP(游戏、视频会议)
  • 21
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一往而情深

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值