进入资料分享群,后台回复:入群
从字面意义上讲,有人可能会认为 TCP/IP 是指 TCP 和 IP 两种协议。实际生活当中有时也确实就是指这两种协议。然而在很多情况下,它只是利用 IP 进行通信时所必须用到的协议群的统称。具体来说,IP 或 ICMP、TCP 或 UDP、TELNET 或 FTP、以及 HTTP 等都属于 TCP/IP 协议。
1 TCP/IP 协议栈
1.1 TCP/IP 标准
1.1.1 TCP/IP 介绍
Transmission Control Protocol/Internet Protocol 传输控制协议/因特网互联协议。
TCP/IP是一个Protocol Stack,包括TCP、IP、UDP、ICMP、RIP、TELNET、FTP、SMTP、ARP等许多协议。
最早发源于1969年美国国防部(缩写为DoD)的因特网的前身ARPA网络项目,1983年1月1日,TCP/IP
取代了旧的网络控制协议NCP,成为今天的互联网和局域网的基石和标准,由互联网工程任务组负责维护。
国防高级研究计划局DARPA与BBN技术公司、斯坦福大学和伦敦大学学院签约,在多个硬件平台上开发
协议的操作版本。在协议开发过程中,数据包路由层的版本号从版本 1 进展到版本 4,后者于 1983 年安装在 ARPA NET 中。它被称为互联网协议版本4(IPv4)作为协议,仍在互联网使用,连同其目前的继承,互联网协议版本6(IPv6)。
RFC 文档:
https://www.ietf.org/rfc/rfc1180.html
RFC ( Request For Comments )
RFC文档也称请求审议文档(Requests for Comments,RFC),是一系列不断修改和完善的报告、协
议提案和协议标准,是用于发布Internet标准的一种网络文件或工作报告。
RFC 是由互联网工程任务组(IETF)维护,由互联网协会(ISOC)赞助发行。
1.1.2 TCP/IP 分层
共定义了四层,和OSI参考模型的分层有对应关系
RFC文档:
https://www.ietf.org/rfc/rfc1122#section-1.3.3
RFC官方分为四层:
-
Transport Layer
-
Internet Layer
-
Link Layer(media-access)
1.1.3 TCP/IP 通信过程
1.1.4 TCP/IP和OSI模型的比较
相同点
-
两者都是以协议栈的概念为基础
-
协议栈中的协议彼此相互独立
-
下层对上层提供服务
不同点
1.2 transport 层
TCP和UDP对比
字段
|
TCP
|
UDP
|
是否连接
|
面向连接
|
无连接
|
是否是可靠传输
|
可靠传输
|
不可靠传输
|
连接目标个数
|
一对一
|
支持一对一,一对多,多对一,多对多传输
|
是否有序
|
有序传输
|
无序传输
|
首部大小
|
首部最少20字节,最大60字节
|
首部8字节
|
传输方式
|
面向字节流
|
面向报文
|
常见应用
|
邮件服务,文件下载,网站浏览等
|
语音聊天,视频聊天等
|
1.2.1 TCP
TCP:传输控制制协议 ( Transmission Control Protocol )
1.2.1.1 TCP特性
-
工作在传输层
-
面向连接协议
-
全双工协议
-
半关闭
-
将数据打包成段,排序
-
确认机制
-
数据恢复,重传
-
错误检查
-
流量控制,滑动窗口
-
拥塞控制,慢启动和拥塞避免算法
更多关于tcp的内核参数,可参看 man 7 tcp
1.2.1.2 TCP包头结构
1.2.1.3 TCP协议PORT
传输层通过port号,确定应用层协议,范围0-65535
维基百科:
https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers
IANA互联网数字分配机构负责域名,数字资源,协议分配
-
0-1023:
系统端口或特权端口(仅管理员可用) ,众所周知,永久的分配给固定的系统应用使用,
22/tcp(ssh), 80/tcp(http), 443/tcp(https)
-
1024-49151:
用户端口或注册端口,但要求并不严格,分配给程序注册为某应用使用,
1433/tcp(SqlServer),1521/tcp(oracle),3306/tcp(mysql),11211/tcp/udp (memcached)
-
49152-65535:
动态或私有端口,客户端随机使用端口,范围定义:/proc/sys/net/ipv4/ip_local_port_range
#常用服务及端口对应关系
cat /etc/services
#查看非特权用户可以使用起始端口
cat /proc/sys/net/ipv4/ip_unprivileged_port_start
#查看客户端动态端口起始
cat /proc/sys/net/ipv4/ip_local_port_range
模拟tcp连接过程
yum install -y nc
apt install -y netcat-openbsd
#查看所有己处于监听状态的tcp端口 t:tcp,l:listen,n:numeric
ss -tnl
#在22已被使用的情况下,用nc监听22失败
[root@ubuntu2204 ~]# nc -l 22
nc: Address already in use
#用nc监本机222
[root@ubuntu2204 ~]# nc -l 222
#用远程主机连接本机222
root@ubuntu2204:~# nc 10.0.0.206 222
#再次查看本机tcp连接状态,能看到有一个远程主机通过222连接本机
[root@ubuntu2204 ~]# ss -tn
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
ESTAB 0 0 10.0.0.206:22 10.0.0.1:64425
ESTAB 0 52 10.0.0.206:22 10.0.0.1:53673
ESTAB 0 0 10.0.0.206:222 10.0.0.208:51108
验证只有root 才能开启超级端口
[root@ubuntu2204 ~]# su - jose
#222端口在1023以内,无权限
jose@ubuntu2204:~$ nc -l 222
nc: Permission denied
#2222可以
jose@ubuntu2204:~$ nc -l 2222
TCP序号和确认号
1.2.1.4 三次握手和四次挥手
TCP三次握手
seq 序号;ack 确认号
抓包规则
MSL:Maximum Segment Lifetime
查看 MSL
半连接:还没有完成3次握手的连接
全连接:己经完成三次握手,但没有被应用层提走的连接
注意:监听的 Socket 和真正用来传数据的 Socket 是两个
-
一个叫作监听 Socket
-
一个叫作已连接 Socket
1.2.1.7 TCP超时重传
#查看当前所使用的拥塞控制算法
[root@ubuntu2204 ~]# cat /proc/sys/net/ipv4/tcp_congestion_control
cubic
1.2.1.9 内核TCP参数优化
[root@ubuntu2204 ~]# vim /etc/sysctl.conf
作用说明:
套接字拖死。该参数对应系统路径为:/proc/sys/net/ipv4/tcp_max_tw_buckets
1.2.2 UDP
UPD:用户数据报协议 ( User Datagram Protocol )
1.2.2.1 UDP特性
-
工作在传输层
-
提供不可靠的网络访问
-
非面向连接协议
-
有限的错误检查
-
传输性能高
-
无数据恢复特性
更多关于udp的内核参数,可参看 man 7 udp
1.2.2.2 UDP包头
1.3 Internet层
1.3.1 Internet Control Message Protocol
利用icmp协议判断网络状态
[root@ubuntu2204 ~]# ping -c4223.5.5.5
PING 223.5.5.5 (223.5.5.5) 56(84) bytes of data.
64 bytes from public1.alidns.com (223.5.5.5): icmp_seq=1 ttl=122 time=2.83 ms
64 bytes from public1.alidns.com (223.5.5.5): icmp_seq=2 ttl=122 time=2.80 ms
64 bytes from public1.alidns.com (223.5.5.5): icmp_seq=3 ttl=122 time=2.85 ms
64 bytes from public1.alidns.com (223.5.5.5): icmp_seq=4 ttl=122 time=2.83 ms
--- 223.5.5.5 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 2.800/2.832/2.858/0.043 ms
发大数据包
多台设备同时去ping一台设备,理论上来讲,可以将该设备网卡打满,这也是ddos攻击的一种
[root@ubuntu2204 ~]# ping -f -s 65508 10.0.0.208
#实时刷新网卡数据
[root@ubuntu2204 ~]# watch ifconfig eth0
1.3.2 Address Resolution Protocol
1.3.4 internet 协议
1.3.4.1 Internet 协议特征
-
运行于 OSI 网络层
-
面向无连接的协议
-
独立处理数据包
-
分层编址
-
尽力而为传输
-
无数据恢复功能
1.3.4.2 IP PDU 报头
IP PDU 报头格式
显示格式
|
IP地址
|
32位二进制
|
00001010000000000000000010011110
|
分组显示,每组8位
|
00001010.00000000.00000000.10011110
|
转十进制点分十进制记法
|
10.0.0.158
|
IP地址由两部分组成
IP地址 172.16.0.0
子网掩码 11111111.11111111.00000000.00000000
子网掩码十进制表示 255.255.0.0
IP类型
|
netmask
|
netmask
|
A
|
255.0.0.0
|
8
|
B
|
255.255.0.0
|
16
|
C
|
255.255.255.0
|
24
|
两种写法转换
10.0.0.100/23 23=8+8+7+0=255.255.254.0
172.16.2.50/18 18=8+8+2+0=255.255.192.0
2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0
128 64 32 16 8 4 2 1
判断对方主机是否在同一个网段:
用自已的子网掩码分别和自已的IP及对方的IP相与,比较结果,相同则同一网络,不同则不同网段
1.4.7 划分子网
划分子网:将一个大的网络(主机数多)划分成多个小的网络(主机数少),主机ID位数变少,网络ID
位数变多,网络ID位向主机ID位借n位,将划分2^n个子网
划分子网数=2^(网络ID向主机ID借的位数)
1.4.8 优化IP地址分配
网络ID 主机ID
合并超网:将多个小网络合并成一个大网,主机ID位向网络ID位借位,主要实现路由聚合功能
#8个C类网段
220.78.168.0/24
220.78.169.0/24
220.78.170.0/24
220.78.171.0/24
220.78.172.0/24
220.78.173.0/24
220.78.174.0/24
220.78.175.0/24
#主机ID向网络ID借3位,网络ID变成21位 168=128+32+8
220.78.10101 000.0 220.78.168.0/24
220.78.10101 001.0 220.78.169.0/24
220.78.10101 010.0 220.78.170.0/24
......
220.78.10101 110.0 220.78.174.0/24
220.78.10101 111.0 220.78.175.0/24
#合并成一个大网
220.78.168.0/21
1.4.9 跨网络通信
跨网络通信:路由,选择路径
路由分类:
优先级:精度越高,优先级越高
1.4.10 动态主机配置协议 DHCP
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),通常被应用在局域网络环境中,主要作用是集中的管理、分配IP地址,使网络环境中的主机动态的获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。由于DHCP是一个UDP协议,所以运行起来更加高效。
DHCP协议采用客户端/服务器模型(C/S模型),服务端可以为客户端提供IP、子网掩码、网关、主机名、DNS等信息。客户端只需将IP获得方式设置为自动获取即可。
— END —
篇幅限制,仅展示部分资料
如欲
获取完整版PDF文件
,
如下方式:
长按二维码
加入星球
10T资源,尽情下载
(资源实时更新,本资源已同步至知识星球)
有其他资源需求及问题欢迎在星球提问
智能网联