一、软件开发的架构
我们了解的涉及到两个程序之间通讯的应用大致可以分为两种:
第一种是应用类:qq、微信、网盘、优酷这一类是属于需要安装的桌面应用(CS架构)
第二种是web类:比如百度、知乎、博客园等使用浏览器访问就可以直接使用的应用(BS架构)
1.1C/S架构
C/S即:Client与Server ,中文意思:客户端与服务器端架构,这种架构也是从用户层面(也可以是物理层面)来划分的。
这里的客户端一般泛指客户端应用程序EXE,程序需要先安装后,才能运行在用户的电脑上,对用户的电脑操作系统环境依赖较大。
1.2B/S架构
B/S即:Browser与Server,中文意思:浏览器端与服务器端架构,这种架构是从用户层面来划分的。
Browser浏览器,其实也是一种Client客户端,只是这个客户端不需要大家去安装什么应用程序,只需在浏览器上通过HTTP请求服务器端相关的资源(网页资源),客户端Browser浏览器就能进行增删改查。
二、计算网络
2.1广播
主机之间“一对所有”的通讯模式,网络对其中每一台主机发出的信号都进行无条件复制并转发,所有主机都可以接收到所有信息(不管你是否需要),由于其不用路径选择,所以其网络成本可以很低廉。有线电视网就是典型的广播型网络,我们的电视机实际上是接受到所有频道的信号,但只将一个频道的信号还原成画面。在数据网络中也允许广播的存在,但其被限制在二层交换机的局域网范围内,禁止广播数据穿过路由器,防止广播数据影响大面积的主机。
2.2单播
在单播通信中,只有一个源点网络和一个终点网络。源点网络和终点网络的关系是一对一的,数据报途径的每一个路由器都要将这个分组从一个接口转发出去。
在单播通信中,路由器仅从它的一个接口转发收到的分组。
2.3多播
在多播通信中,有一个源点和一组终点,是一对多的关系。在这种类型的通信中,源地址是一个单播地址,而目的地址是一组地址。
在多播通信中,路由器可以通过它的多个接口转发收到的分组。
2.3局域网
局域网(Local Area Network,LAN)是指在某一区域内由多台计算机互联成的计算机组。局域网可以实现文件管理、应用软件共享、打印机共享、工作组内的日程安排、电子邮件和传真通信服务等功能。局域网是封闭型的,可以由办公室内的两台计算机组成,也可以由一个公司内的上千台计算机组成。
2.4广域网
广域网(英语:Wide Area Network,缩写为 WAN),又称广域网、外网、公网。是连接不同地区局域网或城域网计算机通信的远程网。
2.5路由器
路由器(Router),是连接因特网中各局域网、广域网的设备,它会根据信道的情况自动选择和设定路由,以最佳路径,按前后顺序发送信号。 路由和交换机之间的主要区别就是交换机发生在OSI参考模型第二层(数据链路层),而路由发生在第三层,即网络层。这一区别决定了路由和交换机在移动信息的过程中需使用不同的控制信息,所以说两者实现各自功能的方式是不同的。
路由器(Router)又称网关设备(Gateway)是用于连接多个逻辑上分开的网络,所谓逻辑网络是代表一个单独的网络或者一个子网。当数据从一个子网传输到另一个子网时,可通过路由器的路由功能来完成。因此,路由器具有判断网络地址和选择IP路径的功能,它能在多网络互联环境中,建立灵活的连接,可用完全不同的数据分组和介质访问方法连接各种子网,路由器只接受源站或其他路由器的信息,属网络层的一种互联设备。
2.6 转发器
转发器(repeator)一种仅在物理层工作的设备。携带信息的信号在网络中只能传播有限的距离,否则衰弱会破坏信号的完整性。转发器在信号变得太弱或受到损伤之前接收这个信号,然后再生或重演原来的比特模式。
2.7 网桥
网桥工作在物理层和数据链路层。作为一个物理层的设备,它再生接收到的信号;作为数据链路层的设备,网桥可以检查包含在帧中的MAC地址(源地址和目的地址)
与转发器的区别:网桥有过滤功能,它能检查帧的目的地址,然后决定应当从哪个出端口将帧发送出去。
2.8IP
IP地址是指互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),是IP Address的缩写。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。
IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)。IP地址通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。例:点分十进IP地址(100.4.5.6),实际上是32位二进制数
IPv4地址:112.23.78.201 转换成二进制01110000 00010111 01001110 11001001
2.8 子网掩码
网络掩码是一个32位的数,这个数左边n位全置1,右边32-n位全部置0,共有三种网络掩码
A类掩码:255.0.0.0 B类掩码:255.255.0.0 C类掩码:255.255.255.0
当一个网络没有子网划分时,使用的是网络掩码。而将一个网络划分为若干个子网后,就要为每个子网建立一个子网掩码,一个子网掩码由子网标识和主机标识两个部分组成。子网划分增加了网络标识的长度,同时减少了主机标识的长度。把一个网络划分为s个子网且每个子网的主机数相同时,可以如下计算每个子网的子网标识:
N是网络标识的长度,Nsub是各子网标识的的长度,而s是子网的数目,它必须是2的乘方
例:把一个B类网络划分为四个子网,因此n的值为16,s=4, Nsub = 18,意味者改子网掩码有18个1和14个0,11111111 11111111 11000000 00000000,转换为十进制:255.255.192.0
三、TCP和UDP
3.1 TCP(Transmission Control Protocol)
可靠的、面向连接的协议(eg:打电话)、传输效率低全双工通信(发送缓存&接收缓存)、面向字节流。使用TCP的应用:Web浏览器;电子邮件、文件传输程序。
3.2 UDP(User Datagram Protocol)
不可靠的、无连接的服务,传输效率高(发送前时延小),一对一、一对多、多对一、多对多、面向报文,尽最大努力服务,无拥塞控制。使用UDP的应用:域名系统 (DNS);视频流;IP语音(VoIP)。
TCP | UDP | |
---|---|---|
是否连接 | 面向连接 | 面向非连接 |
应用场合 | 可靠的 | 不可靠的 |
速度 | 慢 | 快 |
传送数据 | 字节流 | 数据报 |
是否可用于广播 | 否 | 是 |
为什么UDP比TCP快
-
- 不需要连接
- 没有ACK确认
- 没有流量控制
3.4 TCP粘包
3.4.1 什么是粘包
是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾
3.4.2 粘包现象的原因
(1)发送方
TCP默认会使用Nagle算法。而Nagle算法主要做两件事:(1)只有上一个分组得到确认,才会发送下一个分组;(2)收集多个小分组,在一个确认到来时一起发送。所以,正是Nagle算法造成了发送方有可能造成粘包现象。
(2)接收方
TCP接收到分组时,并不会立刻送至应用层处理,或者说,应用层并不一定会立即处理;实际上,TCP将收到的分组保存至接收缓存里,然后应用程序主动从缓存里读收到的分组。这样一来,如果TCP接收分组的速度大于应用程序读分组的速度,多个包就会被存至缓存,应用程序读时,就会读到多个首尾相接粘到一起的包。
3.4.3 如何解决粘包现象
(1)发送方
对于发送方造成的粘包现象,我们可以通过关闭Nagle算法来解决,使用TCP_NODELAY选项来关闭Nagle算法。
(2)接收方
遗憾的是TCP并没有处理接收方粘包现象的机制,我们只能在应用层进行处理。
(3)应用层处理
应用层的处理简单易行!并且不仅可以解决接收方造成的粘包问题,还能解决发送方造成的粘包问题。
解决方法就是循环处理:应用程序在处理从缓存读来的分组时,读完一条数据时,就应该循环读下一条数据,直到所有的数据都被处理;但是如何判断每条数据的长度呢?
两种途径:
(1)格式化数据:每条数据有固定的格式(开始符、结束符),这种方法简单易行,但选择开始符和结束符的时候一定要注意每条数据的内部一定不能出现开始符或结束符;
(2)发送长度:发送每条数据的时候,将数据的长度一并发送,比如可以选择每条数据的前4位是数据的长度,应用层处理时可以根据长度来判断每条数据的开始和结束。
粘包:https://www.cnblogs.com/qiaoconglovelife/p/5733247.html
TCP三次握手、四次挥手:https://blog.csdn.net/qq_38950316/article/details/81087809