#了解TCP/IP参考模型,了解TCP/IP基本概念#
OSI模型由于比较繁琐,OSI没有得到很广泛的应用,反而是TCP\IP参考模型变成整个IP网络通信的基础
TCP/IP协议簇的来源
一、TCP/IP各层定义
二、工作在对应层的协议
三、应用层几个常见协议及对应端口号
四、主机到主机层的两个协议,UDP和TCP
应用要求可靠,选TCP,要求尽力而为,选UDP
TCP和UDP的对比
TCP报文格式
头部会加很多的字段,刚开始学习没必要记住每个字段的含义,循序渐进的时候需要了解记忆,抓包的时候抓到的是bit位,需要按照特定格式的byte长度转换,读懂协议的字段,才算了解数据通信的真谛
端口号的范围:1-65535
保留号码:1-1024 给wellknow的端口,如80给HTTP使用
当我们访问网页时,如果没有加端口号,则默认端口号为缺省的80端口
访问web网页时,输入地址不好记忆,域名好记忆,所以需要有dns服务器帮忙把域名解析成机器可以识别的ip地址
1、Source port是源端口,Destination port指目的端口
2、Sequence number指序列号
3、Acknowledge number指确认号
序列号和确认号是保障TCP协议可靠传输的根本
4、window窗口,checksum校验和,control bits控制位(6位,某一位置1,表示特殊用途)
UDP报文格式:与TCP相比少了序列号和确认号字段,在底层协议定义已经决定了UDP不可靠的特性
TCP连接建立:3次握手
TCP应用开始传输前,需要建立会话,基于会话传输数据;
会话建立过程:
A作为客户端与B服务端建立连接,需要重点关注3个字段 1、Sequence number序列号 2、Acknowledge number确认号 3、control bits控制位
A发送的第一个TCP握手消息,seq序列号是0(往后依次累加)ctl控制位SYN=1表示要建立TCP 3次握手了
B发送的第一个TCP握手消息,seq序列号是0(往后依次累加),ack号=1是用来告诉A,A发送的seq为0的数据已经收到,第二个目的是请求A的下一个数据(seq为1),控制位置位SYN和ACK位
A发送的第二个TCP握手消息,seq序列号是1,ack号=1是用来确认B发送的seq为0的数据已经收到,控制位置位ACK
由此建立起3次握手过程
TCP连接断开:四次握手
A:发送seq=100
B:发送seq=300 ack = 101(确认A的seq=100的数据已经收到)
A:发送seq=101 ack=301 ctl=FIN,ACK//发送FIN请求断开连接,FIN是finish的意思
B:发送seq=301 ack=102 ctl=ACK//发送ACK,确认已经收到消息
B:发送seq=301 ack=102 ctl=FIN,ACK//发送FIN请求断开连接
A:发送seq=102 ack=302 ctl=ACK//确认收到B的消息
TCP和UDP的端口号:
源端口随机分配,目的端口使用知名端口
应用客户端使用的源端口一般为系统未使用的,且大于1023
目的端口号为服务器端应用服务的进程。如telnet为23,http为80
A和B建立3次握手时,B作为数据接收方,有义务给A通告win(窗口值)值,win=3意味着B的缓冲区是3,最多可以一次性发送3个数据,再等确认
A发送3个数据后,把B缓冲区填充满了,B拿走1个数据处理后,回复A ack号码和win=1值
win值的大小,决定了在收到确认前可以发送的字节数,窗口值根据B的缓冲区的大小在不断变化,所以才成为滑动窗口
五、因特网层
因特网层包括的协议:IP、ICMP、ARP等协议
IP协议报文格式
Version:版本4或者6
Header Length:IP头的长度
Priority&Type of Service:用来做Qos
Total Length:报文总长度
Identification、Fragment offset:做分片
Flags:特殊置位标志
Time to live(TTL):存活时间,防环,每转发一次,➖1,当TTL=0时,路由器会给源路由器发送ICMP报错消息,并丢弃数据包
Protocal:协议号,表示DATA里传输的协议类型,类似于内有“TCP或UDP”的报文一份
Header checksum:头的校验和,判断数据在传输过程中有没有出现差错,或者有没有被损坏
Source IP Address:源IP地址
Destination IP Address:目的IP地址
Options:可选字段
ARP协议
ARP协议:地址解析协议
通过广播:who has 192.168.1.2?,其中某交换机会回复自己的MAC,目的MAC为全F则为广播
并把IP地址和MAC做一个对应
缺点:广播浪费资源,不可靠不安全,无确认机制,可能被黑客伪造ARP消息(回复自己的MAC和别人的IP,以此截获发往别人IP的消息),称为ARP欺骗
IPv6版本已经取消掉了ARP协议
电脑查看ARP消息,可以使用arp -a,查看IP对应的MAC地址
因特网层工具
Ping工具软件(程序):常用来探测本地到远端IP地址可达性轻量化工具,是一个软件程序,底层使用ICMP协议,收到对方回应,证明数据往返通路没有问题
Traceroute/Tracert:不同的网络设备使用的命令不同,找出从本地到目标节点之间穿越的路由器的IP地址,帮助分析数据行走路径
两个工具都是网络分析和故障排错的常用工具
例子
从宏观到微观,从抽象到具象
PC构造一个数据帧,PC的HTTP进程,HTTP是基于TCP开发应用
传输层使用TCP,所以会添加TCP的头部,写入源端口号(随机产生),目的端口号:对端服务器侦听的端口号(缺省为80),若服务器自定义端口号我们需要事先明确
因特网层,添加IP头,写入源地址(PC IP),目的地址(Server IP),协议号 6 表示IP头后面跟着一个TCP协议的报文
以太网层,添加以太网帧头,写入源MAC(PC的网卡MAC),目的MAC(PC的网关IP地址所对应的MAC,即R1的GE0/0/0口的MAC,初始情况下可能没有这个目的MAC,需要先发送ARP请求,获取目的MAC地址),类型0x0800 表示后面跟着的是IPv4的报文、
数据包发送给给R1了
R1还原成帧,查看帧头的目的MAC地址,正好是自己,从类型判断是IPv4的数据,就把以太网帧头剥掉,把后面的数据交给自己的IPv4协议栈去处理
R1的IPv4协议栈处理包数据的时候,查看IP头的目前IP地址是192.168.2.1,不是自己的任何一个接口的IP地址,证明数据包不是发给自己的,就拿着目的IP地址去自己的路由表中查找,发现数据包需要从R1的GE0/0/1出去,发送给R2的GE0/0/0口
R1会给数据添加新的以太网帧头,源MAC地址变为R1的GE0/0/1的地址,目的MAC地址变为R2的GE0/0/0口的MAC地址
R2收到数据后,查看目的MAC是自己的GE0/0/0口,继续拆开数据包给IP协议栈
IP协议栈查看目的IP不是自己,但是是本地的直连网段
于是R2重新包裹上新的以太网帧头,源MAC为R2的GE0/0/1的MAC,目的MAC为Server的MAC,数据帧发送给Server
Server收到数据帧后,查看目的MAC是自己,就把报文以太网帧头拆掉,交给自己的IP协议栈处理,IP协议栈查看目的IP是自己,就把IP头拆掉,根据协议号6确认后面是TCP的头,把后面的部分交给TCP协议栈处理,TCP协议栈发现目的端口号是80端口,于是看了下本地TCP的端口是否开启,确认本地80端口开启后,且HTTP的进程在侦听,会把TCP头剥掉,把数据交给HTTP进程去处理。这样就完成了整个的数据通信过程。