文章目录
网络模型
OSI
OSI(Open System Interconnection),开放系统互联
| 物理层 | 数据链路层 | 网络层 | 传输层 | 会话层 | 表示层 | 应用层 | |
|---|---|---|---|---|---|---|---|
| 传输单位 | 传输比特流 | 帧(比特流MAC地址的封装和解封装) | 数据包(帧的IP地址的封装和解封装) | 段/数据报(将数据包封装和解封装),完成链路连接 | 数据,发起和接收会话请求 | 数据,对接收的数据进行解释,加密解密,压缩解压缩等 | 数据,数据的使用和呈现,如WEB,FTP等 |
| 设备 | 物理传输介质 | 交换机 | 路由器 | 电脑 | 电脑 | 电脑 | 电脑 |
| 协议 | 点对点信道:PPP;广播信道:CSMA/CD协议 | IP/X2.5/Ethernet | TCP/UDP | Telnet、FTP、SMTP / NFS、SNMP、DNS、TFTP |
TCP/IP
| 物理层 | 数据链路层 | 网络层 | 传输层 | 应用层 | |
|---|---|---|---|---|---|
| 功能 | 确定传输介质的材质、信道的复用、调制解调等 | 将数据可靠地传输到“相邻”节点(不经过路由器的点对点传输):封装成帧、同名传输、差错检测 |
网际通信(不同IP的网络间通信):寻址,路由选择,尽力而为的无连接服务
|
为应用进程提供逻辑通信 |
|
| 传输单位 | 比特流 | 帧(比特流MAC地址的封装和解封装) | 数据包(帧的IP地址的封装和解封装) | ||
| 设备 | 转发器 | 交换机、网络适配器(网卡) | 路由器 | 电脑、网关(网络层以上的协议转换) | 电脑 |
| 协议 | 点对点信道:PPP;广播信道:CSMA/CD协议 | IP,APR,ICMP,IGMP(后面3个用于配合IP协议) | TCP/UDP | HTTP、Telnet、FTP、SMTP / NFS、SNMP、DNS、TFTP |
交换方式
报文交换、分组交换(TCP/IP使用)、电路交换
连接方式
分组交换中,网络层为传输提供的服务分为两类:
- 面向连接(虚电路):让网络保证交付的可靠性
- 无连接(数据报,
TCP/IP协议使用):让端系统(TCP协议)保证交付的可靠性,网络层(IP协议)向上提供简单灵活的、无连接的、尽最大努力交付的数据报服务。也就是说,传输网络不提供端到端的可靠传输服务,传送的分组可能出错、丢失、重复、失序。所以路由可以简单而低廉。
直接交付和间接交付
直接交付:不经过路由器的报文传输
间接交付:需要路由器的转发交付
IP地址----网络连接标识
定义
本质:描述一台计算机的连接
IPv4 V.S. IPv6
| 字节个数 | 文本格式(网络和主机部分) | |
|---|---|---|
| ipV4 | 4 | nnn.nnn.nnn.nnn(每个n为10进制)(A、B、C、D 或 E) |
| ipV6 | 16 | xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx(每个x为16进制)(网络64位,主机64位) |
IPv4地址分类
ABCDE类
-
A类地址
只有第一位固定,所以可用IP栈整个IP地址空间的50%。-
可指派
网络号个数:126=2^7-2-2的原因
7位全0,即0.x.x.x格式,表示本网络。如0.0.0.35表示本网主机号为35的主机
7位全1,即127.x.x.x格式,表示环回地址 -
可指派
主机号个数:2^24-2-2的原因
24位全0,表示网络号对应的网络的地址
24位全1,表示该网络号下所有主机
-
可指派
-
B类地址
前2位固定,所以可用IP占整个IP地址空间的25%-
可指派
网络号个数:2^14-1(14位全0规定不可指派) -
可指派
主机号个数:2^16-2(-2原因和A类相同)
-
可指派
-
C类地址
前3位固定,所以可用IP占整个IP地址空间的12.5%-
可指派
网络号个数:2^21-1(21位全0规定不可指派) -
可指派
主机号个数:2^8-2(-2原因和A类相同)
-
可指派
-
D类地址
1110+多播地址 -
E类地址
1111+保留
公有地址
大网使用,需要向国际互联网信息中心申请注册,与Internet上的其他计算机随意互相访问,也叫全球地址
私有地址
局域网内部要使用TCP/IP技术,就需要IP地址,但IPv4的数量不足,所以IPv4地址协议中预留了3个IP地址段,供局域网内部使用,也叫本地地址,无法再Internet上使用(路由器不对其进行转发)。私有地址如果可以被作为一般IP地址使用的话,在和因特网相连时,如果网络上有非私有地址和私有地址重名就会产生歧义,所以私有地址需要特别保留出来,所以也叫专用地址或可重用地址。
A类地址:10.0.0.0–10.255.255.255
B类地址:172.16.0.0–172.31.255.255
C类地址:192.168.0.0–192.168.255.255
由于局域网中电脑不会太多,所以会使用C类中的192.168开头的网址(可以容纳256台电脑)
NAT技术(网络地址转换)
- 产生原因:
由于IPv4的不足,产生了私有地址,但是不同局域网私有地址相同,无法直接访问互联网。互联网上的计算机是通过公网IP+内网IP来唯一确定的。(网络号+子网号+主机号+内网IP) - 技术介绍:
NAT技术,叫做网络掩蔽或者IP掩蔽。是一种在IP数据包通过路由器或防火墙时重写来源IP地址或目的IP地址的技术。
IPV4特点
- 网络号需要申请才可以使用
- 路由仅根据目的主机所连接的网络号转发分组,相对于不分等级的地址,减少了路由表所占的存储空间和查找空间
- IP地址表示一个网络连接,一个主机可以连接多少个不同的网络,就有多少个IP地址,一个路由器至少连接两个网络,所以至少有两个IP
- 所有类型的IP地址再被处理时受到平等的对待
v*n(虚拟专用网)
采用私有IP地址(专用IP地址)的互联网叫做专用互联网或本地互联网
同一公司不同地点专用网之间的通信可以采用两种方法:
- 电信公司的专用线路:昂贵
- 虚拟专用网v*n:
一般需要加密,然后封装成在因特网上发送的外部数据包(加上因特网上可用的公用IP),以实现看起来像在本部门的专用网上传输一样。
访问本机的方式
本地回环地址
-
定义
以127开头的地址(127.0.0.1 – 127.255.255.254),通常用127.0.0.1来表示不属于任何一个有类别地址类。
代表设备的本地虚拟接口,所以默认被看作是永远不会宕掉的接口。 -
作用
- 测试本机的网络配置,能PING通127.0.0.1说明本机的网卡和IP协议安装都没有问题;
- 某些SERVER/CLIENT的应用程序在运行时需调用服务器上的资源
localhost
主机域名,意为“本机”,可以被配置为任意的 IP 地址,不过通常情况下都指向 127.0.0.1(ipv4)和 ::1
本机地址(局域网中的ip地址)
本机物理网卡所绑定的网络协议地址,是与具体的网络接口绑定的,,可供其他设备访问到
子网划分
-
产生原因:两级IP有诸多缺点
- 空间利用率低:A,B,C类IP地址可容纳的主机个数差别过大,使得空间利用率低
-
子网划分
使用三级IP地址,从主机号借用若干位作为子网。
网络号+子网号+主机号 -
三级IP的特点
- 本单位以外的网络“看不见”这个网络的子网构成,只会根据主机号判断是否为一个网络
- 降低了主机号使用数量
- 网络先根据网络号找到连接在本单位网络上的路由器,在该路由器收到IP数据报后,再按目的网络号和子网号找到目的子网,最后交付到目的主机。
-
子网掩码
- 子网掩码由连续1+连续0组成。通过和IP地址做与运算,得到网络号+子网号,即
子网的网络地址 - 标准规定所有网络必须使用子网掩码,路由表中也必须有子网掩码这一栏
- 如果一个网络不划分子网,那么该网络的子网掩码就是默认子网掩码,默认子网掩码就是网络号个数个1+子网号个数个0
- 子网掩码由连续1+连续0组成。通过和IP地址做与运算,得到网络号+子网号,即
IP地址 VS MAC地址
IP地址:网络层及以上使用,是一种逻辑地址(软件实现,数据链路层看不到)
MAC地址:物理层和数据链路层使用(MAC地址由于传输链路段的不同而发生的改变,IP也看不到)
有了MAC地址为什么还需要IP地址?
域名
定义
和IP地址对应,便于人的记忆
hosts文件
将一些常用的主机名和其对应的IP建立一个关联数据库
域名结构
树叶(如www,mail)表示的是主机名。使用www,mail作为主机名的好处是,可以告诉浏览器,这是个网站或者邮件服务器
端口号—服务连接标识
定义
- 为了在一台设备上可以运行多个程序,人为的设计了端口(Port)的概念,类似的例子是公司内部的分机号码。通过
IP地址+端口号来区分不同计算机的不同的服务.
##范围
端口号的范围从0到65535(2^16),每个端口对应一个唯一的程序。
##常见端口号
smtp:25
dns:53
https:443/tcp ,443/udp
HTTP协议代理服务器常用端口号:80/tcp(默认),8080,3128,8081,9080
SOCKS代理协议服务器常用端口号:1080
Telnet(远程登录)协议代理服务器常用端口:23
FTP(文件传输)协议代理服务器常用端口号:21(控制端口)(FTP的数据端口不一定是20,这和FTP的应用模式有关,如果是主动模式,应该为20,如果为被动模式,由服务器端和客户端协商而定)
TCP & UDP
TCP V.S. UDP
| UDP | TCP |
|---|---|
| 无连接:发送数据之前不需要建立连接(也就不需要释放连接) |
面向连接:通信前需要先建立连接,通信后需要释放连接 |
| 尽最大努力交付(因为无连接,所以不需要维持复杂的连接状态表而保证交付的可靠) | 提供可靠交付服务:通过端系统保证数据的传输无差错、不丢失、不重复、按顺序到达 |
| 没有拥塞控制:网络拥塞了也照发不误,所以网络的拥塞不会让交互速度降低,增加了丢失的概率,但是降低了延时 | 需要拥塞控制
|
| 面向报文:应用层给多长报文,UDP不拆不组,原封不动发送(报文太长,IP会分组) |
面向字节流:TCP把应用程序交下来的数据看成仅仅是一串无结构的字节流,根据对方给出的窗口值和当前网络拥塞的程度决定一个报文段应该包含多少字节(这样的划分会使得每个报文段没有逻辑上的含义,只剩下物理上大小的合理) |
| 支持一对一、一对多、多对一、多对多通信 | 只支持点对点传输(此处的点指套接字) |
| 首部开销小 | 首部开销大 |
TCP
套接字 socket–多重概念
1、在TCP连接中:套接字 socket = IP地址:端口号
2、在允许应用程序访问连网协议的API种,运输层和应用层直接的一种接口,成为socket API,也叫socket。
TCP可靠传输的实现
- 流量控制:当
接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。 - 拥塞控制:当
网络拥塞时,减少数据的发送。 - 超时重传:接收方收到报文就会确认,发送方发送一段时间后没有收到确认就会重传。
- 数据校验:TCP报文头有校验和,用于校验报文是否损坏
- 数据合理分片和排序
UDP:IP数据报大于1500字节,大于MTU.这个时候发送方IP层就需要分片(fragmentation).把数据报分成若干片,使每一片都小于MTU.而接收方IP层则需要进行数据报的重组.这样就会多做许多事情,而更严重的是,由于UDP的特性,当某一片数据传送中丢失时,接收方便无法重组数据报.将导致丢弃整个UDP数据报.
TCP:会按MTU合理分片,接收方会缓存未按序到达的数据,重新排序后再交给应用层。
TCP三次握手和四次挥手
TCP连接其实是一个双向的连接,例如说,A与B两台电脑建立TCP连接时,实际A到B和B到A时看做两条通道的。
TCP为保证数据可靠性,采用超时重传机制,即在发送某一个数据以后就开启一个计时器,在一定时间内如果没有得到发送的数据报的ACK报文,那么就重新发送数据,直到发送成功为止。
-
三次握手
三次握手的过程
- 第一次握手: 建立连接时发送SYN会选择一个初始序号(ISN),每个连接的ISN都是不同的。客户端发送数据包(SYN=1,seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认;
- 第二次握手: 服务器收到数据包包,必须确认客户的SYN(ACK=1,ack=x+1),同时自己也发送一个SYN包(SYN=1,seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;
- 第三次握手: 客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK=1(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
- 注意:
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。
必须三次握手的原因
采用三次握手是为了防止失效的连接请求报文段并没有丢失,只是在某处暂时滞留,后在连接释放后的某个时间又传送到主机B,造成主机B的资源浪费。失效的连接请求报文段是指:主机A向主机B发送的,在成功连接请求前的,连接请求。考虑这样一种特殊情况,主机A第一次发送的连接请求并没有丢失,而是因为网络节点导致延迟达到主机B,主机B以为是主机A又发起的新连接,于是主机B同意连接,并向主机A发回确认,但是此时主机A根本不会理会,主机B就一直在等待主机A发送数据,导致主机B的资源浪费。
上述特殊情况有以**意点:
- 主机A发送请求后,一段时间接收不到确认会再次发送请求
- 主机A的连接请求失效,即A和B已经建立连接,但建立连接前A发送的请求没有丢失,而是被滞留
- A和B的连接断开后,失效的请求又到达主机B,造成误会
-
四次挥手
四次挥手的过程
- 第一次挥手: 主动断开连接一方向被动断开连接发送FIN数据包,FIN=1,seq=x,告诉被动断开连接一方“我要跟你断开连接了,我不会再给你发送数据了”,这是主动断开连接方式可以接受数据的,如果一直没有收到被动连接方的确认包,则可以重新发送这个包。此时,主动断开连接方处于FIN_WAIT_1状态
- 第二次挥手: 被动连接方接收到FIN包以后,发送确认包ACK=1,ack=x+1(FIN和SYN一样占用一个***),这个动作是告诉主动断开连接方我知道你要断开了,但是我还有数据没有发送完,等发送完了所有的数据就进行第三次挥手,此时被动断开连接方处于CLOSE_WAIT状态,主动断开连接方处于FIN_WAIT_2状态。
- 第三次挥手: 被动断开连接方发送FIN=1,seq=y+1包,用来停止向主动断开连接方发送数据,也就是告诉主动断开连接方,我的数据也发完了,我也不给你发数据了,此时被动断开连接方处于LAST_ACK状态,主动断开连接方处于TIME_WAIT 状态
- 第四次挥手: 等过了一定时间(
2MSL(报文段最大生存时间):为了保证最后ACK报文能够到达B(A的ACK可能会丢失,B在一段时间内收不到会超时重传FIN+ACK报文,让A在2MSL期间收到,A可再次发送ACK),且为了防止已失效连接请求报文段出现在下一次新的连接中(经过2MSL的时间,可以让本连接持续时间内所产生的报文段都从网络中消失,防止对下次连接造成干扰))过后,主动断开连接方发送确认包ACK=1, ack=y+2,至此,四次挥手已经完成。
必须四次挥手的原因
双向连接的关闭的确认
- 第二次挥手的原因:B告知A我已经知道你不再发送了,我也将不再接收(从而让A确认其发送的“不再发送”的消息已经被B接收,B关闭接收功能)
- 第四次挥手的原因:A告知B我已经知道你不再发送了,我也将不再接收(从而让B确认其发送的“不再发送”的消息已经被A接收,A关闭接收功能)
参考文献
https://blog.csdn.net/guoweimelon/article/details/50858597 —IP地址和MAC地址的区别
https://www.zhihu.com/question/21546408 —IP地址和MAC地址为什么要同时存在
https://blog.csdn.net/luckyaslan/article/details/7745245 —IP地址和端口号
https://blog.csdn.net/qq_25184739/article/details/70653216 —常见端口号
https://www.ibm.com/support/knowledgecenter/zh/ssw_ibm_i_72/rzai2/rzai2compipv4ipv6.htm —IPv4 与IPv6 的比较
https://www.cnblogs.com/weiweiqiao99/archive/2012/03/27/2419484.html —IPv4分类
https://my.oschina.net/zsjasper/blog/380730 —内网IP如何连网
https://my.oschina.net/zsjasper/blog/380730 —NAT技术
https://baike.baidu.com/item/本地回环地址#2 —本地回环地址
https://www.zhihu.com/question/23940717 —localhost、127.0.0.1 和 本机IP 三者的区别
https://blog.csdn.net/andybruse/article/details/7982278 —域名中的www
https://troywu0.gitbooks.io/spark/content/tcpsan_ci_wo_shou.html 三次握手四次挥手的过程