linux网络编程基础知识
协议
一组规则。数据传输和数据的解释的规则。
TCP
、IP
、UDP
、ARP
、MQTT
、HTTP
、Modbus
协议等等
TCP
协议注重数据的传输。http
协议着重于数据的解释。传输层 常见协议有
TCP/UDP
协议。
应用层 常见的协议有HTTP
协议,FTP
协议。
网络层 常见协议有IP
协议、ICMP
协议、IGMP
协议。
网络接口层 常见协议有ARP
协议、RARP
协议。
-
TCP
传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。 -
UDP
用户数据报协议,是OSI
参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。 -
HTTP
超文本传输协议,是互联网上应用最为广泛的一种网络协议。 -
FTP
文件传输协议 -
IP
协议是因特网互联协议 -
ICMP
协议是Internet
控制报文协议,它是TCP/IP
协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。 -
IGMP
协议是Internet
组管理协议,是因特网协议家族中的一个组播协议。该协议运行在主机和组播路由器之间。 -
ARP
协议是正向地址解析协议,通过已知的IP
,寻找对应主机的MAC
地址。 -
RARP
是反向地址转换协议,通过MAC
地址确定IP
地址。
分层模型结构
OSI
七层模型
OSI
七层模型:物、数、网、传、会、表、应。
TCP/IP
模型
TCP/IP
:网(链路层)、网、传、应
应用层:telnet
、nfs
、e-mail
、ssh
、ftp
。。。
传输层:tcp
、udp
网络层:ip
、icmp
、igmp
链路层:以太网帧协议、ARP
数据封装
应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部,称为封装
数据没有封装之前,是不能在网络中传递。不同的协议层对数据包有不同的称谓
- 在传输层叫做段(segment)
- 在网络层叫做数据报(datagram)
- 在链路层叫做帧(frame)
数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理。
以太网帧和ARP请求
- 以太网帧格式
源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固化的。ifconfig
命令查看,“HWaddr 00:15:F2:14:9E:3F”
部分就是硬件地址
以太网帧中的数据长度规定最小46字节,最大1500字节,ARP
和RARP
数据包的长度不够46字节,要在后面补填充位,上面的第一个框框就是mtu的最大值
,有效载荷长度。
ARP
数据报文格式
应用程序知道目的主机的IP
地址和端口号,不知道目的主机的硬件地址, 而数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃。因此在通讯前必须获得目的主机的硬件地址。ARP
协议就起到这个作用。源主机发出ARP
请求,询问“IP地址是192.168.0.1
的主机的硬件地址是多少”,并将这个请求广播到本地网段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF
表示广播),目的主机接收到广播的ARP
请求,发现其中的IP
地址与本机相符,则发送一个ARP
应答数据包给源主机,将自己的硬件地址填写在应答包中。
每台主机都维护一个ARP
缓存表,可以用arp -a
命令查看。缓存表中的表项有过期时间(一般为20分钟)
ARP
协议:根据 Ip
地址获取 mac
地址。
以太网帧协议:根据mac
地址,完成数据包传输。
IP协议
-
版本:
IPv4
、IPv6
。4位表示 -
TTL
:time to live
, 设置数据包经过路由节点中的跳转上限,每经过一个节点,那么该值就-1
。当减为0的路由有义务将该数据包给丢弃。 -
4字节32位的源
IP
地址和4字节目的IP
地址。 其中的192.168.1.108
为点分十进制IP
地址,实际上他是string
类型的。而这里是二进制的。
传输层协议
(1)、UDP
-
包含16位的源端口号和16位的目的端口号。 2^16 = 65536 , 所以最大能描述的端口号为65535
-
IP
地址:可以在网络环境中,唯一标识一台主机。 -
端口号:可以网络的一台主机上,唯一标识一个进程。
-
IP
地址+端口号:可以在网络环境中,唯一标识一个进程。
(2)、TCP
- 16位的端口号和目的端口号。
- 32位序号和32位确认序号。确认可靠链接
- 6个标志位:
URG
、ACR
、PSH
、RST
、SYN
、FIN
- 16位的窗口大小
CS和BS模型
-
c/s模型:
client-server
客户端服务器模型 -
b/s模型:
browser-server
浏览器服务器模型
C/S | B/S | |
---|---|---|
优点 | 可以缓存大量的数据,协议选择灵活、速度快 | 安全性高、跨平台好、开发工作量小 |
缺点 | 安全性低、跨平台差、开发工作量较大 | 不能缓存大量数据,严格遵守HTTP |