目录
1.MAC与IP的区别
相同:
都用来表示pc终端的地址
不同:
1.范围不同
2.格式不同
3.通信场景不同
IP地址所在的模型层次:TCP/IP的第三层--网络层MAC地址所在的模型层次--数据链路层
2.IP详解
2.1.tcp/ip协议特点
- 无状态:无状态是指 IP 通信双方是不同步传输数据的状态信息。所有 IP 数据报的发送、传输和接收都是相互独立。
- 无连接:无连接是指IP通信双方都不长久地维持对方的任何信息。上层协议每次发送数据的时候,都需要明确指出对方的IP地址。
- 不可靠:不能保证 IP 数据报准确到达接收端,它只承诺尽最大努力交付。IP 模块一旦检测到数据报发送失败,就通知上层协议,而不会试图重传。
2.2.IPv4的报头结构
Version:ip协议版本-----IPv4、IPv6
IHL:(4位首部长度)表示IP协议头部长度是多少
Type of Service:TOS,数据优先级标志,表示数据的轻重缓急;用来表示服务质量
Total Length:TL,标识ip数据包的整体长度
identification:用于分片重装,同一个分片标识相同
Flags:被分片的相关信息,总共占3位
fargment Offset:用来标识被分片的每一个分段相对于原始数据的位置
Time to Live:TTL,指可以中转多少个路由器的意思,每经过一个路由器,TTL会减少 1,直到变成0 则丢弃该包
Protocol:表示 IP 首部的下一个首部属于哪个协议?TCP or UDP
Header Checksum:首部校验和,校验数据包的首部
Source Address:源地址
Destination Address:目的地址
13.可选字段
14.填充
15.数据
2.3. ipv4的计算
- 32个二进制组成 ----> 4位点分10进制书写格式
- 地址由2部分组成:网络位 + 主机位
- XXXXXXXX . XXXXXXXX . XXXXXXXX . XXXXXXXX
1x2^0+1x2^1+1x2^2+1x2^3+1x2^4+1x2^5+1x2^6+1x2^7= 1+2+4+8+16+32+64+128= 255
1). 主类划分法 (IETF早期规定的网络位划分方法):
主类划分---看数字辩网段
我们通过前8位也就是第一组8位二进制来区分这五类。
A类:前8位二进制为 0XXXXXXX,转换成10进制就是 0 - 127
他的网络位是前8位。因为0 和 127是特殊地址,所以A类的范围是1 - 126
B类:前8位二进制为 10XXXXXX 128 - 191 网络位是前16位
C类:前8位二进制为 110XXXXX 192 - 223 网络位是前24位
D类:前8位二进制为 1110XXXX 224 - 239 组播地址,不分主机位和网络为
E类:前8位二进制为 1111XXXX 240 - 255 保留地址,为美国军方所有
特殊IP地址:
- 127.0.0.1 - 127.255.255.255 ---- 环回地址(私有)---本地测试
- 255.255.255.255 ---- 受限广播地址 ---- 受路由器的限制 --- 只能作为目标IP使用
- 主机位全1 --- 192.168.2.X/24 --- 192.168.2.255 --- 直接广播地址 --- 只能作为目标IP使用
- 主机位全0 --- 192.168.2.X/24 --- 192.168.2.0 -- 网段 -- 网络号
- 0.0.0.0 --- 1:代表没有IP。2:代表任意IP。
- 169.254.0.0/16 --- 自动保留地址
- 10.0.0.0/8;172.16~31.0.0/16;192.168.0.0/16 --- 私有地址
2). VLSM与CIDR :
VLSM --- 可变长子网掩码 ---- 子网划分:
- 无类地址:不再通过数字来辨识网段而是使用子网掩码来辨别,规则是网络位的地址子网掩码置1
- 核心思路:通过延长子网掩码(将主机位借到网络位)来实现网段的划分
10.1.1.1 255.255.255.0 24位 = 10.1.1.1/24
20.1.1.1 255.255.224.0 19 20.1.1.1/19
192.168.1.0 255.255.255.252 30 192.168.1.0/30
192.168.1.0/24 公司新增俩个部门预计20人,如何拆出俩个网段并且不能浪费地址?
192.168.1.0 0XXXXXXX 25
192.168.1.128 1XXXXXXX 25
192.168.1.0/27 255.255.255.224 (27)
192.168.1.32/27
CIDR --- 无类域间路由 ---- 子网 汇总
- 可变长子网掩码---取相同去不同
192.168.1.32/27
192.168.1.160/27
001XXXXX 32
101XXXXX 160
00XXXXXX 0 24
192.168.1.0/24
192.168.1.64/27
192.168.1.96/27
010XXXXX 64
011XXXXX 96
01XXXXXX 64 26
192.168.1.64/26
第四层 (传输层)
3.TCP与UDP
TCP是一种可靠的传输协议,UDP是一种不可靠的传输协议。
- TCP协议传输是可靠的;而UDP的传输是尽力而为的。
- TCP可以进行流控及拥塞控制;而UDP不能
- TCP可以进行数据分段
- TCP耗费资源比较大,速度比较慢;UDP耗费资源较小,速度快
1). 面向连接与无连接:
- 面向连接的意思是数据传输之前收发俩方需建立一条逻辑通路。
类似我们电话时不能拿起来就说,需要先拨号,对方拿起接通电话之后,才能说话,这里说话之前的动作就是面向连接。
- 无连接的意思是通信前不需要建立通路,通信完也不需要断开,自由发送。
类似于古代的寄信,寄之前不需要向对方打招呼,邮差收到信也不需要确认收件人是否方便接信直接处理就行。
- 可靠传输:按需传输、有确认机制、丢失重传、严格校验。
- 不可靠传输:只管传,其他都不管。
2). 源端口:
启动应用是根据空闲端口随机生成。
3). 目的端口:
固定的,代表了某中特定的应用。1-65535 范围,其中1-1023是知名端口号,代表的知名应用。
比如:http 80,ftp 20、21,https 443,ssh 22,telnet 23
4). 应用场景:
UDP:语音类,实时传输类(视频、游戏)
TCP:文件类,追求完整传输的信息类
微信和qq的聊天数据用的是UDP
3.2. TCP的运行过程:
1).三次握手
第一次握手:客户端向服务器发起建立连接的请求
标志位SYN = 1,随机生成一个序列号seq1 = x
第二次握手:服务器告诉客户端我同意你的连接请求,同时我也向你发起建立连接的请求。
标志位SYN = 1,确认号ack = x + 1,随机生成一个序列号seq2=y
第三次握手:客户端也告诉服务器,我同意建立连接。确认号ack = y + 1,seq2= x + 1
2). 传输数据
- 首先,源端口与目的端口,明确发给哪个应用。下来是报文序列号,用来解决数据的乱序问题、确认哪个数据是先来的哪个是后到的。然后确认序列号,发出去的报文应该有个确认,用于知道对方收到没收到,如果没收到就应该重传,当然出现损坏也会重传。TCP是一个可靠传输协议,他面临的网络环境可能很复杂,网络层是没有可靠性保证的,如果网络环境比较差,TCP作为靠谱协议他不能改变网络环境但是他可以通过算法和重传来保证数据传输可靠。
- 下来的数据偏移指的是首部长度,指出TCP报文段的数据起始处距离TCP报文段的起始处有多远,以32比特(4字节)为计算单位。最多有60字节的首部,若无选项字段,正常为20字节。Reserved,保留字段,必须填0。
- window表示窗口大小,TCP能够做一次发多个数据,而不是一个一个发送,这样效率更高,确认是只需要确认最后一个即可。那么窗口值设置多少好呢,TCP有流控机制,根据双方发送能力和接受能力来,也就是说不能发的太多把对方撑死,也不能太少把对方饿死,TCP还有拥塞机制,如果网络传输拥塞丢包了,他就会降低窗口值减小速度。
3). 四次挥手
- 第一次挥手:客户端向服务器端发送断开 TCP 连接请求的FIN=1报文,在报文中随机生成一个序列号 SEQ=x,表示要断开 TCP 连接。
- 第二次挥手:当服务器端收到客户端发来的断开 TCP 连接的请求后,回复发送标志位ACK=1报文,表示已经收到断开请求。回复时,随机生成一个序列号 SEQ=y。由于回复的是客户端发来的请求,所以在客户端请求序列号 SEQ=x的基础上加 1,得到确认序列号ack=x+1。
- 第三次挥手:服务器端在回复完客户端的 TCP 断开请求后,不会马上进行 TCP 连接的断开。服务器端会先确认断开前,所有传输到客户端的数据是否已经传输完毕。确认数据传输完毕后才进行断开,向客户端发送FIN=1报文。再次随机生成一个序列号 SEQ=z。由于还是对客户端发来的 TCP 断开请求序列号 SEQ=x 进行回复,因此确认序列号ack依然为 x+1
- 第四次挥手:客户端收到服务器发来的 TCP 断开连接数据包后将进行回复,表示收到断开 TCP 连接数据包。向服务器发送标志位ACK=1 报文,生成一个序列号 SEQ=x+1。由于回复的是服务器,所以确认序列号ACK字段的值在服务器发来断开 TCP 连接请求序列号 SEQ=z 的基础上加 1,得到ack=z+1
3.3. udp是网络层的透传
- 前面说过UDP是一个无连接协议,发数据之前不会向TCP那样做三次握手建立连接,而是直接发送,能不能收到全看三层是否到达有没有丢包,结束也不需要打招呼。
- 特点就是速度快,开销小,听应用层指挥。
- UDP适合需要实时性或者响应快的应用,比如手机APP,流媒体直播,实时游戏,物联网等。想象一下:当你玩个LOL丢了一个包,如果TCP的话游戏客户端会暂停接收数据等待重传,等你重传好了能动了,但是团战已经结束了。另外QQ,微信这种也用的UDP,但是他们是通过应用层协议来确保数据可靠的。
udp的头部
4. 封装与解封装