1.网络基本概念
网络:就是由若⼲个结点(电脑主机)和连接这些结点的链路组成,是一种一个路由多个主机的网状结构:主机1--(链路)--路由--(链路)--主机2
互联网(internet):多个网络还可以通过路由与路由相互连接起来,即形成⼀个更⼤的⽹络
因特网(Internet):是世界上最⼤的互联网(⽤户数以亿计)
三种交换⽅式: 1. 电路交换 2. 报文交换 3. 分组交换
2.计算机网络体系结构
由于要通信的计算机存在差异性,会影响通信,需要在设计时屏蔽掉这些差异性。
进⾏网络通信的计算机,通信双为了能够通信做出 ⼀种"约定"---协议
网络协议将网络的功能分成不同的模块,以分层的形式组合在⼀起,每⼀层实现不同的作用
网络体系结构:网络的层次结构和每层使用的协议的集合
1.OSI体系结构
应用层:为具体的应用提供⼀些协议,自定义
表示层:数据格式定义、数据转换/加密
会话层:建⽴通信进程的逻辑名字与物理名字的关联
传输层:差错控制/恢复、流量控制、提供可靠的传输
⽹络层:数据分组、路由选择
数据链路层:数据组成可发送、可接收的帧
物理层:传输物理信号(0、1)、接口、信号形式、速率
2.TCP/IP体系结构
应用层:为具体的应⽤提供⼀些协议,自定义
传输层:差错控制/恢复、流量控制、提供可靠的传输
⽹络层:数据分组、路由选择
数据链路层:数据组成可发送、可接收的帧,解决分组在⼀个网络(在⼀个链路)传输的问题|
物理层:传输信号,解决使用何种信号来传输比特流
3.物理层
物理层就是传输媒体介质,考虑怎样才能在连接的计算机的传输媒体上进行比特流的传输
物理层为数据链路层屏蔽了各种传输媒介的差异性,使数据链路层只需要考虑如何完成本层的协议和服务,不⽤考虑传输介质问题
传输介质:
1、引导型传输媒体:同轴电缆、双绞线、光纤、电力线
2、非引导型传输媒体:无线电波、微波、红外线、可见光
编码与调制: 奈氏准则
串⾏和并行:
串行:使用⼀根线进行数据传输
并行:使用多根线⼀起进⾏传输数据
物理层协议:发送时,把0、1按照对应物理规定的⽅式物理信号发送,接收时,根据规定在接收物理信号时转换成0、1。
4.数据链路层
链路:从⼀个结点到相邻结点的⼀段物理线路,中间没有经过其他的交换结点
数据链路:是指把实现通信协议的硬件和软件加到链路上
帧:数据链路层以帧为单位传输和处理数据
数据链路层完成的功能:
1、封装成帧
2、差错检测
3、可靠传输
当多个主机在同⼀个信道上,主机之间通信,则每个主机在数据链 路层必须有⼀个唯⼀标识,即⼀个数据链路层地址mac地址
mac地址就是以太网的数据链路层所使用的地址,mac地址是在数据链路层mac帧才存在,ppp帧的数据链路层不需要地址
mac地址:6字节,mac地址会固化在计算机的⽹卡中,也叫硬件地址
mac地址的分配:
5.网络层
对于mac地址不具备区分不同⽹络的功能,如果只是在单独的⼀个网络,不接⼊因特网,可以只使⽤mac地址(这不是⼀般用户的方式)
对于网络层的主要任务就是实现网络互联,从而实现数据包在各网络之间传输。
主要解决:
1、网络层寻址问题
2、路由选择问题
ip地址:是因特网上的主机和路由器所使⽤的地址
网络地址:标识因特网上数以百万计的网络
主机地址:标识在同⼀个网络中的不同主机
⼀个主机的ip地址 = 网络号 + 主机号
网络号:用于区别不同的网络
主机号:用于区别在同⼀个网络中不同的主机
通过ip地址,就可以标识出在因特⽹主机的唯⼀编号,就可以跨网络寻找
ipv4:因特网上的每⼀台主机(或路由器)的每⼀个接口分配⼀个在全世界内的唯⼀32⽐特位的标识符
ipv6:采⽤128比特位
ipv4地址的编码⽅式有三个阶段: ipv4地址有32位表⽰不⽅便,因此采用点分⼗进制来表示
1. 分类编址
A类地址中: 最小的网络号为0,保留不分配,第⼀个可分配的网络号为1,网络地址1.0.0.0 最⼤的网络号为127,作为本地环回地址,不指派,最后⼀个可分配的网络号为126,网络地址为126.0.0.0
B类地址中: 最小的网络号为128.0,网络地址128.0.0.0 最后⼀个可分配的网络号为191.255,网络地址191.255.0.0
C类地址中: 最小的⽹络号为192.0.0,网络地址192.0.0.0,最后⼀个可分配的⽹络号为223.255.255,网络地址223.255.255.0
2. 划分子网
在网络中申请的网络地址,相对比较大(主机位数比较多),可以表示的主机比较多,可以在原网络中,分成若干个小的网络把原先的网络中,主机号的位数借用一部分来共同表示网络号
如:网络地址 198.223.192.0----->可以划分子网,借用3位: 198.223.192.0
划分成: 198.223.192.0
198.223.192.32
198.223.192.64
198.223.192.96
198.223.192.128
198.223.192.160
198.223.192.192
198.223.192.224
子网掩码:也是32比特位,用来表示在ip地址中,对应的网络号的位数,在网络中用连续的1来对应网络的网络号,用连续的0来对应主机号
3. ⽆分类编址
在ipv4地址后⾯加上⼀个 / ,在斜线后写上当前网络的网络号是 多少比特位 如: 128.14.35.7 / 20 ⽹络号:20位 ,主机号:12位
网络层协议:路由选择协议(静态路由、动态路由)、路由信息协议、最短路径优先协议、边界网关协议
6.传输层
通过网络层,实现了主机与主机之间的通信,在实际网络中通信的真正实体是位于两个主机中的进程,如何为运行在不同主机的应用进程提供通信是传输层的任务,传输层协议也叫做端对端协议:TCP协议 ,UDP协议
不同形式的进程进行网络通信使用传输层协议,可以在协议内容中填写要通信的双方进程是谁,在传输层中设计了⼀个端口号来标识⼀个进程,端⼝号:16位,就是⼀个要进行网络通信的进程的标识,端口号只能表示当前主机的要通信进程,端⼝号只有本地主机才有意义
1. udp⽤户数据报协议
1. ⽆连接,不需要提前把要通信的两个进程关联(连接)起来
2. ⾯向报⽂的传输,应⽤层的数据直接封装在UDP数据报,既不拆分也不进⾏合并,直接交给⽹络层
3. 不可靠,尽最⼤努⼒到达,不保证数据安全 在使⽤UDP协议时,每次发送都要携带⽬标信息
2. tcp传输控制协议
1. TCP是⼀种可靠的传输服务(不会出现传输差错、丢失、 重复等各种现象)
2. 是⾯向连接的服务
3. ⼀个tcp连接只有两个端点,是⼀对⼀通信
4. 是可靠传输 拥塞控制、流量控制、超时重传
5. 面向字节流的传输方式
TCP通信必须先建⽴连接,只有建⽴了连接之后TCP才能实现可靠传输,所以在进⾏TCP通信时,通信双⽅的操作会有部分区别,应该是⼀个主动去建⽴连接,另⼀个是等待连接请求,然后就建⽴连接进⾏通信,把主动的⼀端叫做客户端,把被动的⼀端叫做服务端(服务器端)
TCP是⼀种⾯向连接,在进⾏通信前连接是与个必不可少的过程, 在通信完成后,断开连接也是必不可少的
tcp通信有三个阶段:
1、建⽴连接
2、数据传输通信
3、释放连接
连接解决了以下问题:
1、使TCP通信双方都知道对方的存在
2、能够协商⼀些参数内容(如:最⼤窗⼝值、时间戳选项等)
3、能够使TCP双⽅对资源数据进行分配
TCP建立连接步骤共有三步,叫做三次握⼿:
第⼀次握⼿: TCP客户端打算建⽴连接,向服务器发送连接请求报⽂,客户端请求建⽴连接,客户端进⼊同步发送状态(SYN-SEND) ,在请求报⽂中 把SYN = 1,表⽰这是⼀个请求连接报⽂,把序号字段seq = x(x就是⼀个初始值),作为客户端的初始序号
第⼆次握⼿: TCP服务器在受到客户端请求后,如果同意连接,则会向客户端发送确认请求报⽂,服务器进⼊同步接收状态(SYN_RECV) 在确认报⽂中把同步位SYN和确认位ACK设置为1,表明这是⼀个请求确认报⽂,把序号seq设置⼀个初始值y,作为服务器的初始序号,把确认号字段ack = x+1,作为对客户端的确认
第三次握⼿: TCP客户端在收到了服务器的确认信号后,还要向服务器发送⼀个确认报⽂,并进⼊连接已建⽴(ESTABLISHED) ,发送针对服务器确认的确认报⽂,确认位ACK = 1,表⽰这是⼀个确认报⽂,序号seq = x+1,第⼀次是x,第⼆次发送x+1,确认号ack = y+1,这是对服务器的确认,服务器收到,进⼊连接已建⽴(ESTABLISHED)
TCP连接释放步骤共有四歩,叫做四次挥⼿
第⼀次挥⼿: tcp客户端通知主动关闭tcp连接,tcp客户端发送连接释放(断开)报⽂,并进⼊终⽌等待态1状态 ,终⽌位FIN和确认位ACK设置为1,表⽰是⼀个tcp连接释放报⽂, 同时对之前的报⽂做确认,序号seq设置为u,等于之前已经传送过去的数据最后⼀个字节序号 +1,确认号ack设置为v,等于之前已经收到的数据最后⼀个字节序号 +1
第⼆次挥⼿: tcp服务器收到tcp连接断开请求报⽂,会发送⼀个确认报⽂给客户 端,并进⼊关闭等待状态,客户端收到确认会进⼊终⽌等待态2 状态,确认号ACK设置为1,表明是⼀个确认报⽂,序号seq = v,就是之前服务器发送的最后⼀个字节+1,与第⼀次挥⼿客户端的确认号做匹配,确认号ack = u+1,继续把当前没有传输完成的数据传输完毕
第三次挥⼿: tcp服务端给客户端发送连接释放报⽂,并进⼊最后确认状态,终⽌位FIN个确认号ACK设置为1,表⽰这是⼀个tcp连接释放,同时对之前的数据做确认,seq序号设置为w,这时服务器在半关闭状态,ack确认号设置为u+1,释放的重复确认
第四次挥⼿: tcp客户端收到连接释放,发送确认报⽂,进⼊时间等待状态,确认号ACK = 1,表⽰是⼀个确认报⽂,序号seq = u+1,表⽰是⼀个释放报⽂,确认号ack = w+1,表⽰是⼀个确认
TCP的服务器模型
在服务器中,服务器进⾏监听后,需要创建⼀个新的套接字与客户端进⾏⼀对⼀通信,通常服务端要处理多个客户端通信,为了处理与多个客户端进⾏通信,服务器有不同的处理⽅式
1、循环服务器
⼀次处理⼀个客户端通信 接收⼀个客户端连接请求后,与⼀个客户端进⾏连接通信,在与客 户端的所有通信操作后,断开连接,再与下⼀个客户端进⾏连接通信
2、并发服务器
可以在服务器中同时处理多个客户端的通信 在接收⼀个客户端连接之后可以进⾏通信,同时还可以与其他客户 端连接进⾏通信,可以同时处理多个客户端操作。需要使⽤多进程、多线程