大家好,很高兴今天可以跟大家了解网络知识。
咱们今天Internet是根据TCP/IP协议通信的所以我们从这里入手进行本次讲解
主要内容是:
回顾TCP/IP 分层模型
掌握三次握手和四次断开。
掌握TCP、UDP、IPV4报文结构
了解ICMP重定向
这讲是我们学习网络非常基础的东西。无论是IPV4时代还是IPv6时代,我们今天学习的是有必要的。
好了,先来大概回顾两者大致的区别:
1.OSI是一个理论模型。而TCP/IP是目前Internet的核心协议,也就是说是实际的协议。
2.OSI是先有模型;TCP/IP是先有协议,后有模型。
3.OSI适用于各种协议栈;TCP/IP只适用于TCP/IP网络。
4.从层次上来看tcp/ip可以是四层协议模型,也可是五层协议模型。而OSI就是传统的7层模型。
这里也可以简单的说一下TCP/IP协议簇的应用层对应这OSI高三层,提供网络服务。比如 :浏览网页,下载我们常用FTP,收发邮件协议,远程登陆,简单网络管理协议,域名服务等等都是应用层可以提供的进程。
好了,大家先简单的概述一次,网络通信的过程:
●在A主机上,应用层将一串应用数据流传送给传输层。
●传输层将应用层的数据流分段,并加上TCP报头形成TCP段,交给TCP协议下相应进程的端口号并送交网络层。
●在网络层给TCP段加上包括源、目主机IP地址的IP报头,生成一个IP数据包,并将IP数据包送交链路层。
●链路层在其MAC帧封装在源目IP前,与此同时会在最后面加上校验和。数据链路层会根据ARP广播得到同一局域网下PC的MAC地址。第一种情况目的MAC是同一局域网下直连的MAC,便通过物理层的传输介质连接到对端。当然无线也是物理层的传输介质。
●在目的主机,链路层将MAC帧的帧头去掉,并将IP数据包送交网络层。
●网络层检查IP报头,如果报头中校验和与计算结果不一致,则丢弃该IP数据包;若校验和与计算结果一致,则去掉IP报头,将TCP段送交传输层。
●传输层检查数据的顺序号,判断是否是正确的TCP分组,然后检查TCP报头数据。若正确,则向源主机发确认信息;若不正确或丢包,则向源主机要求重发信息。
●在目的主机,传输层去掉TCP报头,将排好顺序的分组组成应用数据流送给应用层相应进程。
>第二种情况,show arp 没有找到目的MAC就通过连接到这个网段的网关路由器,网关路由器就会show ip route 查看路由表,通过路由器条目查看到到目的IP的路径,
下面看一下传输层,传输层有两个协议TCP、UDP。TCP是面向连接的和咱们打电话一样,建立好连接后才通信。UDP是面向无连接的,就向发短信,数据先发了,不管对方看还是没看。TCP弥补了IP协议的不稳定性。这里还有一个比较重要的知识点,端口号。
端口号。他是用于表示通信之间的进程的。一共有65536个。1-1024一般是大家熟知的端口号大多都是固定的。但是现在大于1024的端口也有被占用了,比如qq是8000。
大家共同的回忆一下常用的端口号:
tcp6,udp17,icmp 1基于UDP的有:tftp69,snmp161,rip520,基于TCP的有:ftp:20,21,telnet23,smtp25,http80,HTTPS443.EIGRP88,ospf89,这里说一下DNS,咱们PC到server的DNS一般都是基于UDP的,而server与server之间是基于TCP的。
在windows中可以通过netstat参数查看端口的使用情况。
咱们看一下TCP的包头。
TCP报文段分为两部分,报文首部和数据,所谓报文首部就是TCP为了实现端到端可靠传输所加上的控制信息。
简单的看一下TCP报文首部的字段内容:
●源端口:表示进程来自与哪(任意数,一般都是大于1024的),
●目的端口:源主机想去的进程,一般是小于1024的固定端口。
这里给大家穿插一点分用、复用:比如一个主机有多个进程,多个进程同时往外发送数据叫分用。当多个进程都通过TCP端口进来时,叫复用。
●序列号和确认号,用于目的端口的数据到达对端的可靠性传输的重要工具。序列号是发出的数据流中每一个字节都会编上序列号,接收到对端想收到的下一个报文段的数据的第一个序列号叫做确认号。有此看来两者是同时存在的。
举个例子:A发送数据包的第一个byte的序列号,比如三次握手已经建立好了。比如seq number=30,B收到的后回应A时ACK=301,就意味着B告诉A我已经收到序列号30以前的数据,我想收到的下一个数据序列号是31,
下面字段的内容大家看一下:
●数据偏移量是指TCP包头的首部长度,占4bit,TCP包头长度是可变的,后面的填充项是用来保证TCP首部长度是4字节的整数倍。
●保留位占6bit目前设为0,为将来应用而留的。
●还有6bit的编码位:(与抓的包对应着看)
1bit的紧急位和16bit紧急指针是配合使用,告诉数据的接收方,在我发送的数据里面有紧急数据,紧急指针说明了具体放在哪,用的比较少。
1bit确认位,ACK=1表示确认连接。
1bit推送位,PSH=1也就是不将用户进程放在缓冲区。
1bit复位位,RST=1时,断开TCP连接。TCP断开连接本来需要四次断开可以用到。如果把RST设置为1可以立即断掉。
1bit同部位,SYN=1请求建立TCP连接。也就是说三次握手中会出现SYN位。
FIN终止比特。FIN=1释放连接.
●窗口字段,他跟滑动窗口大小机制有关,他也是一个流控机制,
●下一个校验和他保证你传送过来的数据是OK的,不被破坏。
好了下来看一下TCP三次握手,这里我们需要自己抓包类进行分析!(打开抓的包分析)
第一次握手:主机A发送syn=1请求建立连接,随机产生seq number=X的数据包发送,主机B由SYN=1知道,A要求建立连接;
第二次握手:因为TCP通信是双向的这时主机B收到请求后要确认连接信息,向A发送ack =(主机A的seq+1),syn=1告诉A我也要建立连接,ack=1确认A的连接,随机产生seq=Y的包.看到ack=1时说明单向通信建立成功了。
第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq=number+1,以及位码ack是否为1,主机A会再发送ack number=(主机B的seq+1),ack=1确认连接,主机B收到后确认seq值与ack=1则连接建立成功。
问题:为什么TCP连接要三次握手,断开要四次断开尼?
因为TCP是全双工的,全双工就是有两条相互独立的通道,可以同时传输数据,所以关闭就要两边全关,要不就是半关闭了。
四次断开流程:
1. 当主机A完成数据传输后,将终止比特FIN=1,这表明提出停止TCP连接的请求,并随机产生seq number=X的数据包发送
2主机B收到FIN=1后对其作出响应,确认这一方向上的TCP连接将关闭,将ACK置为X+1来回应A的seq
3 与此同时应用进程关闭由B 端再提出反方向的关闭请求,将FIN置1
4 主机A对主机B的请求进行确认,将ACK=Y+1,双方向的关闭结束.
由TCP的三次握手和四次断开可以看出,TCP使用面向连接的通信方式,大大提高了数据通信的可靠性,使发送数据端和接收端在数据正式传输前就有了交互,为数据正式传输打下了可靠的基础
案例: A-------------------------------B 能否ping通
192.168.1.1/24----------------------------192.168.1.2/16
咱们看一下UDP,UDP只负责封装起来,扔到对方就可以的。如果应用层觉得数据可以重传就申请重传就好了,UDP 一般应用于语音视频,我看的是电视上的影像最多有个变形什么的,这就用到了UDP。
下来看一下UDP报文的格式,源端口目的端口和TCP的功能是一样的标识进程的。校验和是一个可选项。这里大家可以回忆一下基于UDP端口测协议有哪些??tftp69,snmp161,rip520
我们下来看一下网络层,网络层非常丰富,今天我们只讲一下IP和ICMP,
IP的包头就靠大家下来抓包分析了,看看IPV4与IPV6 IP包头区别是很大的。IPV6有更高的安全性,这也是为什么在IPV6的世界里面路由协议为什么不需要认证功能了。
IPV4的包头
4bit的版本位,0100 IPV4 0110 IPV6,与版本位共占一个字节。
头部长度是可选的,5*4字节(32位bit)=20字节。
服务类型,占了8bit,指定特殊的数据怎么处理,抓包看到的是区分服务段3bit的优先权,最高的是网络控制,延时,吞吐量,可靠性,开销的。对服务要求高的视频语音啊已经不用他了。
总长度,16bit最大长度是65535,但一般被MTU管着那,大于1500就会分片。现在想尽办法不让分片。
标识符,16bit 功能:通常与标记字段、分段偏移量是共同使用的。
TTL生存周期过一个路由器减1.
填充项,不够32个字节用0 1 进行补齐。
好了,网络层再看一下ICMP,ICMP里面涵盖的内容很多的,Internet网里的信令兵,一个是普通的信息,一个是差错报告。现在我们经常用到的ping工具,在网络层判断网络层是通的就是基于ICMP的。
比如172.16.3.1 ping 172.16.3.2 看是否是通的,看的是网络层是否可达。Ping的功能是很强的,今天就不展开细讲了,还有trace路由器,主机 tracert 还可以看经过的路径