笔记
网络基础
一.网络通信的引入
IPC通信方式,只能完成同一台主机之间多个进程间的通信,在实现跨主机的多个进程间通信时,就显得力不从心了。所以我们引入了网络通信,基于套接字socket的通信方式,能够完成同一主机之间的多个进程间的通信和跨主机的多个进程间的通信。
任何一种通信方式都需要一个通信载体:管道通信需要使用管道文件进行数据缓冲;消息队列、共享内存、信号灯集需要使用IPC对象来进行数据的缓冲;网络通信通过套接字文件实现数据的缓冲
二.网络发展历史
发展阶段:
1.APRAne阶段---冷战产物
2.TCP/IP协议阶段---只有TCP和IP两个协议
3.osi开放系统互联模型
4.TCP/IP协议族
2.1APRAnet阶段
阿帕网,是inteme的最早雏形
不能互联不同类型的计算机和不同类型的操作系统
没有纠错功能
2.2TCP/IP两个协议阶段
在计算机网络中,要做到有条不紊的交换数据,需要遵循一些事先约定好的规则。这些规则明确规定了所交换的数据的格式以及有关的同步问题。为了进行数据中的数据交换而建立的规则、标准和约定称为网络协议
联网协议:定义如何在一个网络上传输信息的一组规则
TCP/IP协议分成了两个不同的协议:
用来检测网络传输中差错的传输控制协议TCP
专门负责对不同网络进行互联的互联网协议IP
2.3网络体系结构及OSI开放系统系统互联模型
2.3.1网络体系结构概念
每一层都有自己独立的功能,当每一层都不可获取
通常把功能相近的协议组织在一起放在一层,协议栈。所以每一层中其实有多个协议
分层的好处:
1、各层之间独立,每一层不需要知道下一层如何实现,而仅仅只需要知道该层通过层间的接口所提供的服务
2、稳定,灵活性好,当任意一层发生变化时,只需要层间接口关系保持不变,而这层以上或以下层不受影响
3、易于实现和维护(知道是什么功能,就到指定层去查找)
4、促进标准化工作:每一层的功能及所提供的服务都有了精确的说明
5、结构上不可分割开:各层都可以采用最合适的技术来实现
2.3.2OSI开放系统互联模型
OSI是ISO(国际标准化组织)提出的一个理想化模型
OSI共有七层
2.3.3TCP/IP协议族的体系结构
TCP/IP协议族是Internet事实上的工业标准
TCP/IP网络体系结构四层:
应用层
传输层
网络层
链路层(网络接口和物理层)
虽然TCP/IP体系结构只有四层,但是做的事儿和OSI的七层是一样的
TCP/IP四层结构和OSI开放系统互联模型七层的对应关系
linux内核五大功能:
内存管理:内存的分配和回收
进程管理:时间片轮转,上下文切换、
文件管理:将一堆0和1转换成人类好识别的字符
设备管理:linux下一切皆文件
网络管理:网络协议栈的管理
协议:发送方和接收方都遵循的:数据发送及数据解析的一组准则
2.3.4数据封包和拆包的过程
一帧数据的说明
大小为64-1518(包含以太网的头部14字节、尾部4字节)
如果数据大于MTU(最大传输单元,linux默认是1500),需要分成多次进行传输
可以使用指令lfconfig查看MTU最大传输单元
3.3.5TCP/IP四层结构中常见的协议
应用层:
HTTP(Hypertext Transfer Protocol)超文本传输协议
万维网的数据通信的基础
FTP(File Transfer Protocol)文件传输协议
是用于在网络上进行文件传输的一套标准协议,使用TCP传输
TFTP(Trivial File Transfer Protocol)间的文件传输协议
是用于在网络上进行文件传输的一套标准协议,使用UDP传输
SMtP(Simple Mail Transfer Protocol)简单邮件传输协议
一种提供可靠且有效的电子邮件传输的协议
传输层:
TCP(Transport Control Protocol)传输控制协议
是一种面向连接的、可靠的、基于字节流的传输层通信协议
UDP(User Datagram Protocol)用户数据报协议
是一种无连接、不可靠、快速传输的传输层通信协议
网络层:
IP(Internetworking Protocol)网络互连协议
是指能够在多个不同网络间实现信息传输的协议
ICMP(Internet Control Message Protocol)互联网控制信息协议
用于在IP主机、路由器之间传递控制消息、ping命令使用的协议
IGMP(Internet Group Management Protocol)互联网组管理
是一个组播协议,用于主机和组播路由器之间的通信
链路层:
ARP(Address Resolution Protocol)地址解析协议
通过IP地址获取对方mac地址
RARP(Reverse Address Resolution Protocol)逆向地址解析协议
通过mac地址获取IP地址
注意:
每层使用的协议,有下层决定,不能乱用
三.TCP和UDP异同
共同点:同属于传输层的协议,都用于网络传输
TCP ————> 稳定
1>提供面向连接的,可靠的数据传输服务
2>传输过程中,数据无误、数据无丢失、数据无失序、数据无重复
1.TCP会给每个数据包编上编号,该编号称之为序列号
2.每个序列号都需要应答包应答,如果没有应答,则会将上面的包重复发送直到正确为止
3>数据传输效率低,消耗资源多
4>数据收发是不同步的
1.为了提高效率,TCP会将多个较小,并且发送间隔短的数据包,沾成一个包发送,该现象称为沾包现象
2.该沾包算法称之为Nagle算法
5> TCP的使用场景:对传输质量比较高的以及传输大量数据的通信,在需要可靠通信的传输场合,一般使用TCP协议
列如:账号登陆,大型文间下载的时候
UDP————>快速
1>面向无连接的,不保证数据的可靠的,尽最大努力传输的协议
2>数据传输过程中,可能出现数据丢失、重复、失序现象
3>数据传输效率高,实时性高
4>限制每次传输的数据大小,多出部分直接忽略删除
5>收发是同步的,不会沾包
6>适用场景:发送小尺寸的,在接收数据给出应答比较困难的情况下
列如:广播、通讯软件的音视频
四.网络编程基础相关的概念
4.1字节序
1>不同主机在存储多字节整数时(short、int、long),由于cpu架构的不同,存储方式也不同,大致分为两类:
大端存储:地址地位存储数据的高位
小端存储:地址地位存储数据的低位
2>验证方式:使用指针、共用体
4.2IP地址
1>ip地址的相关概念
1、ip地址全称为(Internet Protocol Address):是主机在网络中的唯一标识。
2、当数据在网络中传输时,需要要携带源ip地址和目的ip地址,路由器就是依靠该地址进行路由选择,以便于确定对端主机的
2> ip地址的分类
1、ipV4:采用的是4字节无符号整数表示,取值范围【0, 2^32-1】
LAN(local area network): 局域网
WAN(Wide Area Network):广域网
2、ipV6:采用16字节无符号整数表示,取值范围【0, 2^128-1】
3> ip地址的分类:ip地址一共分为五类:A、B、C、D、E类网络
4> 一个局域网下的特殊的IP地址
1、网络号 + 0:表示该网络,不分配给任何主机使用
2、网络号 + 255:广播地址,不分配给任何主机使用
3、网络号 + 1:默认为网关地址
4、127.0.0.1:本地环回地址,用于主机内部自测使用
5、0.0.0.0:表示当前局域网的任意一个主机号
6、255.255.255.255:一般表示广播
5> 点分十进制
由于ip地址是一个4字节无符号整数,如果真用整数表示,是一个非常难记忆的数据。为了解决这个问题,我们引入了点分十进制,将4字节的每一个字节为单位转变成十进制数,中间用点隔开。在C语言中,使用字符串存储
由于网络通信中依然使用的是4字节无符号整数,那就需要引入点分十进制与4字节无符号整数转变函数
4.3端口号
1> 为了区分同一主机上的多个进程,使用端口号来进行处理
2> 端口号是一个2字节的无符号整数存储,取值范围【0,65535】
3> 网络通信中两个决定性因素:IP + 端口号
4> 端口号的分类:
众所周知的端口号:
0~1023端口我们编程时候不要使用,是那些”VIP“应用程序占了
TCP 21端口:FTP文件传输服务
TCP 23端口:TELNET终端仿真服务
TCP 25端口:SMTP简单邮件传输服务
TCP 110端口:POP3邮局协议版本3
TCP 80端口:HTTP超文本传输服务
TCP 443端口:HTTPS加密超文本传输服务
UDP 53端口:DNS域名解析服务
UDP 69端口:TFTP文件传输服务
特殊的端口函数,存储在linux中的 /etc/services文件中
TCP和UDP的端口号是相互独立的
可以使用的:1024~49151,就是我们平时编写服务器使用的端口号
临时端口号:49152~65535,这部分是客户端运行时候动态选择的