网络就是一种辅助双方或者多方能够连接在一起的工具
网络的目的就是为了联通多方然后进行通信用的,即把数据从一方传递给另外一方
而所谓的网络编程就是,让在不同的电脑上的软件能够进行数据传递,即进程之间的通信(网络socket)
不同计算机之间都约定遵守的网络通信协议叫做TCP/IP协议族
因为互联网协议包含了上百种协议标准,但是最重要的两个协议是TCP和IP协议,所以,大家把互联网的协议简称TCP/IP协议
网络基础术语
ip(Internet Protocol)地址:⽤来在⽹络中标记⼀台电脑的⼀串数字(ipv4:32位/ipv6:64位)
注意:如下ip网段属于私⽹IP,不在公⽹中使⽤的,它们的范围是:
⼦⽹掩码(netmask):确定了一个IP地址的32位二进制数字中哪些是网络号,哪些是主机号
端口(Port):区分不同的服务
因为IP地址与网络服务(HTTP(万维网服务),FTP(文件传输),SMTP(电子邮件)等)的关系是一对多的关系.
实际上是通过”IP地址+端口号”来区分不同的服务的
端口区别不同电脑的进程,进程号是区别同一台电脑中的进程
arp协议:通过ip得到mac地址
mac地址(物理地址):产商序列(前3个字节)和网卡序列(后3个字节)组成电脑的唯一标识
交换机(还有路由功能)与集线器(hub:向所有的电脑进行广播):同一网段的直接通信
交换机的作⽤:
- 转发过滤:当⼀个数据帧的⽬的地址在MAC地址表中有映射时,它被转发到连接⽬的节点的端⼝⽽不是所有端⼝(如该数据帧为⼴播帧则转发 ⾄所有端⼝)
- 学习功能:以太⽹交换机了解每⼀端⼝相连设备的MAC地址,并将地址 同相应的端⼝映射起来存放在交换机缓存中的MAC地址表中,但到了一定时间会自动清空
如果PC不知⽬标IP所对应的的MAC,那么可以看出,pc会先发送arp⼴ 播,得到对⽅的MAC,然后在进⾏数据的传送
当switch第⼀次收到arp⼴播数据,会把arp⼴播数据包转发给所有端⼝ (除来源端⼝);如果以后还有pc询问此IP的MAC,那么只是向⽬标的 端⼝进⾏转发数据
rarp协议:根据mac地址找IP
ping 192.168.1.1–>走ICMP协议
网关(Gateway):发送的ip不在同一个网段内,那么会把这个数据发送给默认网关
因为跨网之间不能直接通信这是TCP/UDP协议规定的
路由(就是一个网关设备):连接不同网段间的通信,至少两个网卡(同时网卡设置时,必须是不同网段)
RIP(路由协议):多个路由器之间的通信
TTL:指一个数据包在网络上经过路由器数量的最大值(也就是说一个数据包经过了多少个路由器,一般最大值是128)
MSL:一个数据包在网络中存储的最长时间(保证数据包的存活时间,一般是1-2分钟)
NAT(网络地址转换器):私有IP不能直接上网,必须通过路由器的转换成公有IP(也是国内的路由器所具有的功能)
TCP协议
tcp(传输控制协议)在通信开始之前,⼀定要先建⽴相关的链接,才能发送数据,注重数据传输稳定(一定能接收到)
可以通过packet tracer 来模拟tcp协议的三次握手与四次挥手过程
即第3次握手完成后发送了第四次握手的ACK包后就进入了TIME_WAIT状态,
必须在此状态上停留两倍的MSL时间,等待2MSL时间主要目的是怕最后一个ACK包对方没收到,
那么对方在超时后将重发第三次握手的FIN包,主动关闭端接到重发的FIN包后可以再发一个ACK应答包
当是服务先close时,为了避免2MSL的等待状态出现,所导致的端口被占用的问题
serSocket.setsockopt(SOL_SOCKET, SO_REUSEADDR , 1)
TCP通信过程(网络是双向的,所以在手机配置路由协议的时候,返回的路由协议也要配置好)
UDP广播
udp(用户数据包协议)通信模型中,在通信开始之前,不需要建⽴相关的链接,只需要发送数据即可,注重速度流畅
单播(点对点)
多播(一对多)
广播(一对所有,只向交换机发一份数据,然后交换机进行广播发送)
tcp在三次握手过程中的数据格式有syn,syn+ack和ack
TCP长/短连接
- ⻓连接可以省去较多的TCP建立和关闭的操作,减少浪费,节约时间.对于频繁请求资源的客户来说,较适用⻓连接
- 短连接对于服务器来说管理较为简单,存在的连接都是有用的连接,不需要额外的控制手段,如果客户请求频繁,将在TCP的建立和关闭操作上浪费时间和带宽
处理应用层的HTTP协议(无状态,无连接)
应用层的协议:根据应用场景不一样,从而对数据进行不同格式的封装(将应用层的数据能拿到传输层中去send()或rece()
服务器与客户端共同遵守才使得Server-client之间看得懂而进行交流),比如ftp(传输文件),ssh(远程登陆),http(网页),smtp(邮件)
所以应用层要解决的问题是:传递什么数据(封装数据)
tcp三次握手之后,使用http协议传输数据报文给下面三层(理解为一个整体快递公司,传输数据方式(快递公司)–>IP(地理位置坐标)–>具体的传输工具)
socket是操作系统提供的tcp/udp传输协议的工具
|
|
HTML超文本文件,HTTP:超文本传输协议
http协议的数据包,传输的是html格式文件,而不是字符串格式
http客户端(浏览器,app,爬虫)与服务器如何收发数据:
浏览器和服务器都会自动生成socket, 响应头/请求头Content-Length:128响应体/请求体
浏览器引擎:就是解析HTML格式(也可以说是对字符串的解析)成网页的算法,同时也有JS的解析器
JS解析器已经脱离了前端发展成Node.js这各后台的服务器了
服务器的开发实际上就是在服务端的rece()和send()之间数据处理开发
http协议是无状态的,一次请求之后就会关闭 http1.0短连接,即使是长连接也是无状态
默认情况下所在HTTP1.1中所有连接都被保持,除非在请求头或响应头中指明要关闭:Connection: Close
Keep-Alive功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接
URI:全球资源标识
通过位置来标识:URL:全球资源定位符(Location:表示位于服务器的那个位置)?k=value&(包含在请求头的Query String)
通过名字来标识资源:URN(N:Name)