1、计算机网络概论
1.1、计算机网络是什么?
利用通讯线路将地理上分散的、具有独立功能的计算机系统和通信设备按不同的形式连接起来,以功能完善的网络软件及协议实现资源共享和信息传递的系统
1.2、主要网络有哪些
- 局域网
- 城域网
- 广域网
计算机网络发展概史
- 诞生阶段,单个计算机为中心的远程联机系统
- ARPANET 多个主机通过通信线路互联起来 去中心化
- 开放性的标准化体系结构,OSI诞生 ISO OSI参考模型 开发系统互联参考模型 IEEE TCP/IP模型
- Internet 互联网
2、TCP/IP详解
2.1、计算机网络体系结构
各层之间的关系
每一个抽象层建立在低一层提供的服务上并且为高一层提供服务
2.2、TCP/IP协议族
TCP/IP 传输控制协议/因特网互联协议,是Internet最基本的协议,Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。协议采用了四层的层级结构。然而在很多情况下他是利用IP进行通信时所必须用到的协议群的统称
TCP/IP概念层模型 | 功能 | TCP/IP协议族 |
---|---|---|
应用层 | 文件传输,电子邮件,文件服务,虚拟终端 | TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet |
应用层 | 数据格式化,代码转换,数据加密 | 没有协议 |
应用层 | 解除或建立与别的接点的联系 | 没有协议 |
传输层 | 提供端对端的接口 | TCP UDP |
网络层 | 为数据包选择路由 | IP,ICMP,RIP,OSPF,BGP,IGMP |
链路层 | 传输地址的帧以及错误检测功能 | SLIP,CSLIP,PPP,ARP,RARP,MTU |
链路层 | 以二进制数据形式在物理媒体上传输数据 | ISO2110,IEEE802,IEEE802.2 |
TCP 面向链接的可靠的流协议
UDP 面向无连接的通讯协议 eg:UDT HTTP3 DNS 视频音频
2.3、网络传输中的数据
- 包 全能性术语
- 帧用于表示数据链路层中包的单位
- 片是IP中数据的单位
- 段则表示TCP数据流中的信息
- 消息是指应用协议中数据的单位
2.4 网络通信中的地址和端口号
- MAC地址,网络设备的唯一地址,写到设备里的地址不可更改,在物理层,链路层
- IP地址:互联网上的网络或主机分配一个唯一的逻辑地址,是可以更改的,通讯子网划分,
- 端口号:用来识别同一台计算机中进行通信的不同应用程序。也被称为程序地址,80 443 8080
2.5、TCP (传输控制协议)基本特性
- 面向连接 通讯完成后还需要拆除连接,端对端
连接是虚拟连接,只要三次握手的报文正常,就算建立了连接
物理链接:固定电话
TCP的网络传输的线路不是固定的,这样设计的原因就是去中心化,防止某个网络节点坏了,不能完成通信,
因为线路不是固定的所以,数据接收方接收到的片的顺序也不是固定的,所以会有下面的数据排序的特性
- 可靠性 超时重传和应答确认,确保通讯的可靠
- RTT(往返时延,Round-Trip Time)和RTO(重传超时,Retransmission Timeout)
基于往返时延,重新计算重传超时的超时时间
- 数据排序
IP层分片会对包进行编序,数据接收方会对片进行排序,
- 流量控制 (滑动窗口)
有可能通讯的两个对端,处理数据的能力不同,接收数据的速度可能比发送数据的速度慢,于是TCP的应答报文里,会告诉对方,我只能接收多少个字节,别太快我受不了
- 全双工
通讯两个对端,可以同时往对方发送,也可以同时接收
2.6 TCP的三次握手
客户端调用 connect方法,与服务器建立连接的过程、
SYN 报文的一个标志位,seq:序列号,ACK也是标志位
客户端发送一个SYN=1,seq=234112 的报文给服务端,客户端进入SYN_SENT状态,等待服务端应答
服务端发送应答报文 SYN=1,ACK=1,ack=23412+1 ,seq=6478 通过小写的ack 告诉客户端 我收到了你的SYN报文,现在我给你一个应答,服务端进入 SYN_RCVD状态
客户端收到应答报文,检查 ACK是否等于1.ack是否为234112+1,检查通过后客户端会给服务端应答ACK=1,ack=6478+1,客户端进入ESTABLISHED状态连接建立状态
服务端收到客户端的ACK应答报文 服务端进入ESTABLISHED,三次完成,可以进行数据传输
为什么需要三次握手?
TCP是面对连接的,所以需要双方都确认连接的建立,确认双方的收发能力,因为在传输数据的时候,用到了seq序列号,确保数据的顺序,所以,必须确认双方的seq,正好三次握手是确认双方seq的最小次数
TCP中的四次挥手(分手)
断开一个TCP连接时,需要客户端和服务端总共发送四个包以确认连接的断开。
过程:
第一次挥手:客户端发送关闭请求
第二次挥手:服务端响应客户端关闭请求
第三次挥手:服务端发送关闭请求
第四次挥手:客户端发送关闭确认请求
客户端主动关闭调用close方法,发送 FIN=1 seq=98745报文给服务端,客户端进入 FIN_WAIT_1状态,表示客户端不再向服务端发送数据,但是可以接收服务端的数据
服务端发送 ACK=1 ack=98745+1应答客户端,服务器进入 CLOSE_WAIT状态
客户端收到应答报文后进入,FIN_WAIT2状态
当服务端向客户端发送数据发送完成之后,再向客户端发送一个报文 FIN= 1 seq=76432发生了变化的seq,服务端进入CLOSE状态
客户端收到服务端的FIN报文后,客户端进入TIME_WAITING状态 ,客户端发送应答ACK=1,ack=76432+1的应答报文
服务端收到客户端的应答报文后进入CLOSED状态,服务端完全关闭不再接收也不再发送,客户端需要维持TIME_WAITING一段时间 持续2*MSL之后 进入到CLOSED状态
MSL:最长报文段寿命(存活的最长时间 RFC文档中定义 2 分钟,大部分操作系统,真正实际时间30s)实际TIME——WAITING 1-4分钟
四次分手的报文有可能会合并发送,当客户端发送关闭请求的时候,此时 服务端没有数据需要发送给客户端,他的应答报文和FIN报文可能会合并发送,
为什么需要四次挥手?
TCP是全双工(即客户端和服务端可以相互发送和接收请求)所以需要双方都确认关闭连接
为什么需要TIME_WAIT状态?
客户端的最后一次应答报文可能在网络传输中会丢失,所以客户端还得进行一次重传,确保可靠的终止TCP/IP
保证迟来的TCP报文有足够的时间,被识别并丢弃
3、网络工具 WireShark TCPDump
抓包工具
捕获过滤器 显示过滤器
BPF 语法
表达式: 原语(限定词<id 名字 数字>) 组合 原语(限定词<id 名字 数字>)
dst host 192.168.0.10 && tcp port 80 捕获的数据 目的主机地址是192.168.0.10 协议是tcp 端口号是80
原语 dst host 192.168.0.10,tcp port 80 两个原语用&&进行连接
dst(DIR限定词 制定传输方向)host(Type限定词 指定后边数字的意义) tcp(协议限定词)port(Type限定词) 80
BPF 还可以限定某个位置的报文是多少 TCP[13]&4=4 捕获报文的第十三个字节的第四位等于四的所有报文
显示过滤器
!udp and ip.addr=101.89.18.167 //显示非UDP的,ip地址为101.89.18.167的报文
3.1、WireShark 看看TCP的三次握手
第一个报文解析:
源IP:192.168.1.60 发起http请求的客户端的地址,
目的IP:192.168.1.226 http的服务端的地址
第二个报文解析
目的IP:192.168.1.60 发起http请求的客户端的地址,
源IP:192.168.1.226 http的服务端的地址
第三个报文解析
源IP:192.168.1.60 发起http请求的客户端的地址,
目的IP:192.168.1.226 http的服务端的地址
4、一次完整的http请求的过程
- DNS域名解析(本地浏览器缓存,操作系统缓存或者DNS服务器)
- 三次握手建立TCP连接
- 客户端发起HTTP请求
- 服务器响应HTTP请求
- 客户端解析html代码,并请求HTML代码中的资源
- 客户端渲染展示内容
- 关闭TCP连接
1.0 连接不可以复用 2.0IO多路复用,一次TCP连接可以进行多次http请求