网络通信协议基础
互联网是我们日常生活中离不开的东西,那么网络通信协议是怎么回事呢?网络相信大家都很熟悉,但是网络通信协议是怎么回事呢,下面就让小编带大家一起了解吧。
OSI 七层
互联网协议按照不同的功能分为OSI七层,也可以合并成5层
- 应用层
- 传输层----数据段
- 网络层----数据包
- 数据链路层----数据帧
- 物理层----数据位
可以看到,每一层的数据都有不同的叫法,这只是为了方便讨论而做的命名。
每层都有特殊的协议运行,越往上的层越靠近用户,越往下越靠近硬件
用户使用网络,感知到的只是最上一层应用层,其下的层开发者也不需要去真的封包解包,都是使用套接字来处理
物理层
计算机与计算机之间物理的介质:电线,网线,光线
发送的都是0101这样没有意义的电信号,需要读出电信号的实际意义,需要数据链路层对他进行处理
数据链路层
规定一种协议,所有的计算机都基于这种协议来通信,规定了多少电信号位为一组,这一层就依据这个协议来对读0101数据:以太网协议
以太网协议
Ethernet,做出一系列规定,所有的计算机都可以依据这个规定通讯
-
一组电信号构成一个数据包,叫做帧
-
每一数据帧分成两个部分,报头和数据
扫描二维码关注公众号,回复: 10957305 查看本文章头包含
- 发送者的地址,占6个字节
- 接收者的地址,占6个字节
- 数据的数据类型,6个字节
数据部分就是具体传的数据,最长有限制,超过了就会分片发送
-
头中放的地址是mac地址
使用以太网协议,就可以知道0101表示的是什么内容
mac地址
以太网协议规定每个接入互联网的设备都要有网卡,网卡的地址在出场的时候就被写死,全世界唯一
发送者和接收者的mac地址放在数据帧的头中
广播
以太网内的通信方式,以太网内所有计算机都会接收到这个数据,都对他进行解包,看看头里面的接收者是不是自己,不是就不管,是的话就继续读下去得到数据
类似于村口大喇叭,所有人都能听到,但是只有指定的那个接收者会进行回应
网络层
要与全世界的计算机进行通信,当然不能用一个全世界都能听到的大喇叭喊话,于是规定另一种协议:IP协议
IP协议
区分要发送的数据哪些是可以用大喇叭喊到的,哪些不是
- 如果在一个村,大喇叭喊一声可以得到回应,就用喇叭喊
- 不在一个村,就采用别的方法先发电报给别的村,别的村广播站再用大喇叭喊
IP地址被分为两部分,单独使用哪个部分都不能够辨识一个IP所处的子网,必须一起使用
- 网络部份:标识子网
- 主机部分:标识主机
子网掩码
长的跟IP地址一样,是表示子网络特征的一个参数,可以通过and运算用来判断两个IP地址是否再一个子网内
总结一下,IP协议的作用主要有两个,一个是为每一台计算机分配IP地址,另一个是确定哪些地址在同一个子网络。
IP 数据包
于数据链路层的帧一样,网络层也会把数据包起来,加上头,然后把整个包当作数据丢给链路层
ARP协议
一种通过广播获取要通信计算机的mac地址的方式,使用arp协议之后,ip地址就可以标识实际上任意一台计算机
传输层
网络层的ip帮我们区分子网,以太网层的mac帮我们找到主机,还需要找到具体的应用程序:使用端口,与网卡关联
传输层功能:建立端口到端口的通信
- 计算机上每一个需要网络通信的程序,都会开一个端口
- 同一时间只会有一个程序占据一个端口
- 端口的范围是 0-65535,其中8000以前是操作系统用的,之后是应用软件用的
tcp协议
在传输数据前先在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输
TCP和UDP使用IP协议从一个网络传送数据包到另一个网络。把IP想像成一种高速公路,它允许其它协议在上面行驶并找到到其它电脑的出口。TCP和UDP是高速公路上的“卡车”,它们携带的货物就是像HTTP,文件传输协议FTP这样的协议等。
在传输数据前必须进行三次握手,用来创建双向的连接,三次握手后才能进行数据传输
传输过程中,客户端和服务端都会经历两种状态的变化
- 客户端:syn_cent ----> established
- 服务端:syn_listen ----> wstablished
总结三次握手的步骤:
- 第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认。
- 第二次握手:服务器B收到SYN包,必须确认客户A的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态。
- 第三次握手:客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK=k+1),此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手
TCP结束数据传输要进行四次握手
客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送(报文段4)。
服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。
服务器B关闭与客户端A的连接,发送一个FIN给客户端A(报文段6)。
客户端A发回ACK报文确认,并将确认序号设置为收到序号加1(报文段7)。