了解OSI七层模型的意义
OSI网络模型分为七层,由下至上分别为:算法
- 1-物理层 (无 网线网卡)
- 2-数据链路层* (ARP协议(二进制) mac地址)
- 3-网络层*(ip协议 ARP协议(二进制))
- 4-传输层* (tcp/udp协议(二进制))
- 5-会话层
- 6-表示层 (无 处理数据压缩及安全问题)
- 7-应用层* (http协议 ftp协议(文本协议))
其中咱们做为软件开发者来讲须要重点关注“四层”:数据链路层,网络层,传输层,应用层 计算机和计算机通讯都是经过tcp/ip来进行的,TCP/IP不是一个协议,而是一个协议族的统称。里面包括了IP协议,IMCP协议,TCP协议,以及咱们更加熟悉的http、ftp协议等等。电脑有了这些,就好像学会了外语同样,就能够和其余的计算机终端作自由的交流了。浏览器
TCP/IP协议族分层
- 数据链路层:处理与物理设备交互的具体细节
- 网络层:数据在网络中是分组传输的,网络层处理分组在网络中的活动
- 传输层:也叫运输层,处理端到端的通讯细节,这里的端指的是(端口和端口)
- 应用层:处理网络数据与应用程序的交互细节
TCP/IP协议族按照层次由上到下,层层包装,每层协议须要实现的功能:将上层传递的数据包装为满⾜该层协议的数据包,将下层传来的数据包解析为满⾜上层协议的数据包。最上面的就是应用层了,这里面有http,ftp,等等咱们熟悉的协议。而第二层则是传输层,著名的TCP和UDP协议就在这个层次第三层是网络层,IP协议就在这里,它负责对数据加上IP地址和其余的数据(后面会讲到)以肯定传输的目标。第四层是叫数据链路层,这个层次为待传送的数据加入一个以太网协议头,并进行CRC编码,为最后的数据传输作准备。再往下则是硬件层次了,负责网络的传输,这个层次的定义包括网线的制式,网卡的定义等等(这些咱们就不用关心了,咱们也不作网卡),因此有些书并不把这个层次放在tcp/ip协议族里面,由于它几乎和tcp/ip协议的编写者没有任何的关系。发送端主机从上自下将数据按照协议进行封装,加上首部。而接收数据的主机则按照协议从获得的数据包解开,层层删除首部,最后拿到须要的数据。这种结构很是有栈的味道,因此某些文章也把tcp/ip协议族称为tcp/ip协议栈。
数据链路层
数据链路层有三个目的:缓存
- 上层为网络层,为IP模块发送和 接收IP数据报。
- 为ARP模块发送ARP请求和接收ARP应答
- 为RARP发送RARP请 求和接收RARP应答 ip是网络层协议,你们应该并不陌生。ARP叫作地址解析协议,是用IP地址换MAC地址的一种协议,他的做用是:将32bit的IP地址,转换为48bit的以太⽹地址,发送ARP⼴播,得到⽬的端的IP地址和硬件地址。而RARP则叫作逆地址解析协议。
arp协议
arp报文格式安全
协议组成:
网络层
网络层的主要功能:网络层识别IP地址,可以将信息送到正确的主机和处理数据报在⽹络中的⾏为。网络层的主要协议有:IP协议,ARP协议,RARP协议,因特网报文协议ICMP、因特网组管理协议IGMP等。oop
- IP协议及IP数据报
- IP协议是TCP/IP协议的核心,全部的TCP,UDP,IMCP,IGCP的数据都以IP数据格式传输。IP协议用于将多个包交换网络链接起来,它在源地址和目的地址之间传送一种称之为数据包的东西,并提供对数据大小的从新组装功能,以适应不一样网络对包大小的要求。要注意的是,IP不是可靠的协议,这是说,IP协议没有提供一种数据未传达之后的处理机制——>这被认为是上层协议:TCP或UDP要作的事情。因此这也就出现了TCP是一个可靠的协议,而UDP就没有那么可靠的区别。
- IP数据报格式以下:
IP数据报由首部和数据部分组成。首部的前一部分是固定长度为20字节,是数据报必须具备的。在首部的固定部分以后的是一些可选字段,其长度是可变的。
-
协议组成(字段存在严格约定的顺序):测试
- 版本:4位
- ⾸部⻓长度:4位,须要注意的,是指4位表示的10进制数4个字节的数⽬,154,⾸部最⻓长为60字节
- 服务类型:8位,⼤部分实现不⽀持,⽆需关注
- 总⻓长度:16位,因此最⼤的IP包为65536
- 标识:16位,惟⼀标识主机发送的每⼀份数据报
- 3位标志+13位⽚偏移:暂时不关注
- ⽣存时间:8位,数据报最多可通过的路由数
- 上层协议:8位,代表该IP数据报对应的上层协议是什么
- ⾸部校验和:16位,保证IP数据包传输正确
- 源IP地址:32位
- ⽬的IP地址:32位
-
路由选择:
- 每⼀个IP数据报在⽹络中进⾏传输的⽬的,是要找到⽬的IP的主机地址,并 最终到达该主机。因此IP数据包通过的每⼀个节点都至关因而⼀个中转 站,也就是路由。因此IP数据报被路由节点的操做被称为路由选择。
- 常规的路由机制:1.⽬的主机与源主机直接相连,或处于共享⽹络,直接送达⽬标主机 2.默认转发⾄该⽹络存在的路由器上,再由其统⼀处理
-
路由匹配算法:
- 路由表中存在与⽬的IP地址彻底相同的条⽬,直接发送⾄下⼀跳
- 路由表中存在与⽬的IP地址⽹络号相同的条⽬,发送⾄该条⽬指定的下⼀跳
- 以上条件均不成⽴,寻找默认条⽬,发送⾄该条⽬指定的下⼀跳
- 均不成⽴,返回主机或⽹络不可达的错误
-
经常使用命令:
- ifconfig:查看⽹络接⼝
- netstat -rn:查看路由表
- nststat -in:查看接⼝信息 ip地址:IP地址由网络号(包括子网号)和主机号组成,网络地址的主机号为全0,网络地址表明着整个网络。
-
ip地址分类:
- A类地址以0开头,第一个字节做为网络号,地址范围为:0.0.0.0~127.255.255.255;
- B类地址以10开头,前两个字节做为网络号,地址范围是128.0.0.0~191.255.255.255;
- C类地址以110开头,前三个字节做为网络号,地址范围是:192.0.0.0~223.255.255.255。
- D类地址以1110开头,地址范围是224.0.0.0~239.255.255.255,D类地址做为组播地址(一对多的通讯);
- E类地址以1111开头,地址范围是240.0.0.0~255.255.255.255,E类地址为保留地址,供之后使用。 注:只有A,B,C有网络号和主机号之分,D类地址和E类地址没有划分网络号和主机号。
-
255.255.255.255
该IP地址指的是受限的广播地址。受限广播地址与通常广播地址(直接广播地址)的区别在于,受限广播地址只能用于本地网络,路由器不会转发以受限广播地址为目的地址的分组;通常广播地址既可在本地广播,也可跨网段广播。例如:主机192.168.1.1/30上的直接广播数据包后,另一个网段192.168.1.5/30也能收到该数据报;若发送受限广播数据报,则不能收到。 注:通常的广播地址(直接广播地址)可以经过某些路由器(固然不是全部的路由器),而受限的广播地址不能经过路由器。
经常使用于寻找本身的IP地址,例如在咱们的RARP,BOOTP和DHCP协议中,若某个未知IP地址的无盘机想要知道本身的IP地址,它就以255.255.255.255为目的地址,向本地范围(具体而言是被各个路由器屏蔽的范围内)的服务器发送IP请求分组。
127.0.0.0/8被用做回环地址,回环地址表示本机的地址,经常使用于对本机的测试,用的最多的是127.0.0.1。
子网掩码是一个32位地址,用于区别两个IP地址是否属于同一个子网。若两个IP地址与其子网掩码相与后相同,则说明这两个IP地址属于同一个子网。 子网掩码由1和0组成,且1和0分别连续。左边是网络位,用二进制数字“1”表示;右边是主机位,用二进制数字“0”表示。 这样作的目的是为了让掩码与IP地址作按位与运算时用0遮住原主机数,而不改变原网络段数字,并且很容易经过0的位数肯定子网的主机数(2的主机位数次方-2,由于主机号全为1时表示该网络广播地址,全为0时表示该网络的网络号,这是两个特殊地址)。只有经过子网掩码,才能代表一台主机所在的子网与其余子网的关系,使网络正常工做。
默认分配的子网掩码每段只有255或0 A类的默认子网掩码 255.0.0.0 一个子网最多能够容纳1677万多台电脑 B类的默认子网掩码 255.255.0.0 一个子网最多能够容纳6万台电脑 C类的默认子网掩码 255.255.255.0 一个子网最多能够容纳254台电脑
- IP协议-IP分⽚
- ip根据标志字段和片偏移进行分片,共16位,IP分⽚时,该值被复制到每⼀个分⽚中
- 其中3位标志:首位是保留字段,默认为0;次位当不进行ip分片时为1,须要分片时为0;末位除了最后一次分片,其余片均为1
- 13位片偏移:标志该片偏移原始数据包开始的位置
- 注意:当IP分⽚时,只丢失⼀⽚数据,也须要重传整个IP数据报,当给定数据报的第⼀个数据报⽚到达时,开始定时器,过时丢 弃全部数据报⽚,因此ip协议是不可靠的协议
传输层
- 网络层协议只提供了点到点的链接,而传输层协议提供一种端到端的服务,即应用进程之间的通讯。网络层协议提供不可靠、无链接和尽力投递的服务,所以,若是对于可靠性要求很高的上层协议,就须要在传输层实现可靠性的保障。传输层主要有TCP和UDP协议。
- TCP即传输控制协议,是一个可靠的、面向链接的协议。它容许网络间两台主机之间无差错的信息传输。TCP协议还进行流量控制,以免发送过快而发生拥塞。
- UDP即用户数据报协议,它采用无链接的方式传送数据,也就是说发送端不关心发送的数据是否到达目标主机,数据是否出错等。收到数据的主机也不会告诉发送方是否收到了数据,它的可靠性由上层协议来保障。
- 这两个协议针对不一样网络环境实现数据传输,各有优缺点。面向链接的TCP协议效率较低,但可靠性高,适合于网络链路很差或可靠性要求高的环境;UDP面向非链接,不可靠,但由于不用传送许多与数据自己无关的信息,因此效率较高,经常使用于一些实时业务,也用于一些对差错不敏感的应用。这样就能够在不一样的场合和要求下选用不一样的协议,达到预期通讯目标。下面我将详细介绍一下tcp。
tcp协议格式
- TCP是面向链接的可靠协议,TCP协议为实现可靠的数据传输而提供了一系列的方法 和手段。
- 首先,TCP的数据段采起编号的方式保证数据的正确顺序。TCP数据段被封装在IP数据包中来完成传输,而IP数据包通过的路径有可能不一样,那么IP数据包到达时可能会失去原有顺序,于是到达的TCP数据段也可能会失序。为了解决这个问题,TCP对数据段进行编号。对接收到的数据进行从新排序,而后以正确的顺序交给应用层
- 其次,因为到达的IP数据包有可能会发生重复,因此TCP的接收端必须有丢弃重复数据的功能。
- 再次,TCP提供流量控制。
TCP协议的各类功能的实现依赖于它的首部数据结构。在TCP的首部中包含了许多TCP数据段的重要信息,下面就TCP的首部数据结构进行详细讲解。
- 0~15这16位称为源端口号;它是TCP数据段发送方进程对应的端口号,这个端口号是由发送方进程产生的随机数,它惟一地标识了发送端的一个进程。
- 0~15这16位称为源端口号;它是TCP数据段发送方进程对应的端口号,这个端口号是由发送方进程产生的随机数,它惟一地标识了发送端的一个进程。
- 第2行是32位的序列号,它提供0~2^32-1范围内的一个数字。TCP从应用程序取得数据后,会根据实际传输能力把数据划分红不一样的数据段。TCP用这个数字来给数据段打上标记,当数据到达目的地后,接收端会按照这个序列号把数据从新排列,保证数据的正确性。
- 第4行分为4个部分。
- 第1部分是4位首部长度,用它能够肯定首部数据结构的字节长度。通常状况下TCP首部是20个字节,但当要扩展首部长度大小时可使用这个字段,好比把这4个位都置为1就获得TCP首部长度的最大值60。4位的最大值是1111换算成十进制是l5,表示首部长度为l5行。而每行数据有32位即4个字节长,因此首部长度为15×4=60
- 第2部分是6个保留位。
- 第3部分是6个控制位。这6位有很重要的做用,TCP的链接、传输和断开都是受这6个控制位的指挥
- URG:紧急指针有效位,它和第5行的16位紧急指针配合使用,当URG=1时,TCP根据16位紧急指针肯定紧急数据的最后一个字节的位置。这样接收端就能够优先准确快速
- ACK:只有当ACK=1时确认序列号字段才有效。当ACK=0时,确认号无效。
- PSH:标志位为1时要求接收方尽快将数据段送达应用层,这个标志位是为了加快特殊数据的处理速度。
- RST:值为1时通知从新创建TCP链接。
- SYN:同步序号位。TCP须要创建链接时将这个位置为1。
- FIN:发端完成发送任务位,当TCP完成数据传输须要断开链接时,提出断开链接的一方将这个位置为1。
- 第4部分是1 6位的窗口大小,它说明本地可接收数据段的数目,这个值的大小是可变的,当网络通畅时这个窗口值变大以加快传输速度,当网络不稳定时减少这个值可保证网络数据的可靠传输,TCP协议中的流量控制机制就是依靠变化窗口的大小实现的
- 第5行中的16位校验和是用来作差错控制的,在发送TCP数据段时,由发送端计算TCP数据段全部字节的校验和。当到达目的地时又进行一次校验和计算。若这两次的校验和一致则说明数据基本是正确的。不然将认为该数据已被破坏,接收端将抛弃该数据
- 第5行中的16位紧急指针和URG配合使用,当URG=1时有效。用来讲明紧急数据的末尾字节的位置。
- 第6行是可选项,只有当4位首部长度大于20时才有效,那时TCP的首部中会附加更多的信息,通常状况下没有可选项。
- 第7行是数据,它是由应用层的数据分段而获得的一部分数据,是TCP协议服务的对象。在传输前TCP协议会给这部分数据加上一个序号,来表示这个部分数据在数据总体中的位置。
TCP是一个面向链接的服务,也就是说在数据通讯以前,发送端与接收端要先创建链接。等数据发送结束后,双方再断开链接。一个TCP链接不只须要端口,还须要IP地址来肯定通讯的主机。故而IP首部中的发送端IP地址加上发送端端口号就造成了链接的发送端;目标端IP地址再加上接收端端口号就肯定了链接的接收端。这样就惟一地肯定了一个TCP链接。
在TCP/IP协议中,TCP协议是基于IP协议的。IP协议是对应于网络层的协议,它是 一个不可靠的协议。TCP协议的可靠性保证给IP协议提供了可靠环境,从而使得IP协议能够没必要考虑传输的可靠性,专一于网络层的功能。这也是协议分层的初衷。TCP被认为是一种流式传输层服务。它表示TCP发送端从应用程序接收到字符流,并从这个流中提取适当的长度建立数据段,而后将其发送到网络上。TCP接收端则接收数据段,从中提取数据,若没有按序号到达还要对其进行排序,并将其做为字符流交付给接收端应用程序。这样就完成了数据的传输。
TCP的三次握手四次断开
一、tcp三次握手
TCP在创建链接的时候使用端口号来完成与应用程序的对应。当一台计算机和其余计算 机进行链接、通讯时使用IP地址和端口号。链接的每一方都是由一个IP地址和一个端口号组成的。好比经过IE浏览器上网时,经过解析输入的URL地址能够获得IP地址,这时还有一个隐含的端口号80。这样就构成了链接的服务器方。一样,链接的客户端也会有本身的IP地址和端口号。在计算机上能够经过命令netstat-n来查看目前存在的链接进程。TCP创建链接的过程称为3次握手。创建链接的过程以下图所示:
- 第1次握手是客户端经过将一个含有“同步序列号”(SYN)标志位的数据段发送给服务器而开始请求链接。经过该数据段,客户端告知服务器两点:我但愿跟你创建链接,同时告诉服务器使用哪一个序列号做为数据传输时数据段的起始。
- 第2次握手是服务器用一个带有“确认应答”(ACK)和“同步序列号”(SYN)标志位的数据段相应客户端。它也有两个目的:发送ACK通知客户端我收到了数据段;通知客户端从哪一个序列号开始给数据段作标记。
- 第3次握手是客户端再次发送一个数据段,确认收到了服务器的数据段,这时就能够开始传送实际数据了。
- 这样3次握手就所有完成了,数据将开始传输了。
3次握手有以下特色:
- 没有应用层数据。
- SYN这个标志位只有TCP创建链接时才被置为1。
- 握手完成后SYN标志位被置为0。
二、tcp四次断开
TCP创建一个链接时进行了3次握手,而终止一个链接要通过4次。这是由TCP的半关闭(half-close)形成的。什么是TCP的半关闭呢?
由于一个TCP链接是全双工的(即数据可在两个方向上同时传递),因此进行关闭时每一个方向必须单独地进行关闭。这个单方向的关闭都称为半关闭。关闭的方法是一方完成它的数据发送任务后,就发送一个FIN来向另外一方通告将要终止这个方向链接。当一端收到一个FIN,它必须通知应用层TCP链接已经终止了那个方向的数据传送。发送FIN一般是应用层进行关闭的结果。
TCP的断开要通过4步,但后两步和前两步很类似,只是关闭链接的双方调换角色而已
- 客户端将控制位FIN置为1,提出中止TCP链接的请求。
- 服务器收到FIN后对其作出响应,确认这一方向上的TCP链接将关闭。
- 由服务器再提出反方向的关闭要求,将FIN置为1。
- 由客户端对服务器端提出的关闭作出应答,双方向的关闭结束。
这样一共通过4个步骤后,TCP全双工的双向链接都获得了正常的关闭。
- 在数据传输阶段,客户端向服务器发送了序列号为100的数据段,服务器接收到后,发送了序列号为300、确认号为10l的确认数据段。这时,客户端与服务器已经完成了数据的传输。
- 客户端主动断开链接,向服务器发送序列号为101的数据段,其中将FIN标志位置为1,同时,确认前一个服务器发送来的数据段,确认号为301,并将ACK置1。
- 服务器接收到这个断连请求后,发送序列号为30一、确认号为102的确认数据段,执行被动关闭。这时,完成了客户端→服务器的半关闭。
- 接着服务器向客户端发出了序列号为30一、FIN置1的断连请求,要求断开服务器→客户端方向的链接。
- 客户端收到这个FIN,应答了一个确认号为302的确认序列,执行被动关闭。这时,完成了TCP的断开链接的工做。