day33
参考:http://www.cnblogs.com/linhaifeng/articles/5937962.html
IP协议:
- 规定网络地址的协议叫ip协议,它定义的地址称之为ip地址,广泛采用的v4版本即ipv4,它规定网络地址由32位2进制表示
- 范围0.0.0.0-255.255.255.255
- 一个ip地址通常写成四段十进制数,例:172.16.10.1
ip地址分成两部分
- 网络部分:标识子网
- 主机部分:标识主机
注意:单纯的ip地址段只是标识了ip地址的种类,从网络部分或主机部分都无法辨识一个ip所处的子网
例:172.16.10.1与172.16.10.2并不能确定二者处于同一子网
子网掩码
所谓”子网掩码”,就是表示子网络特征的一个参数。它在形式上等同于IP地址,也是一个32位二进制数字,它的网络部分全部为1,主机部分全部为0。比如,IP地址172.16.10.1,如果已知网络部分是前24位,主机部分是后8位,那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。
知道”子网掩码”,我们就能判断,任意两个IP地址是否处在同一个子网络。方法是将两个IP地址与子网掩码分别进行AND运算(两个数位都为1,运算结果为1,否则为0),然后比较结果是否相同,如果是的话,就表明它们在同一个子网络中,否则就不是。
比如,已知IP地址172.16.10.1和172.16.10.2的子网掩码都是255.255.255.0,请问它们是否在同一个子网络?两者与子网掩码分别进行AND运算,
172.16.10.1:10101100.00010000.00001010.000000001
255255.255.255.0:11111111.11111111.11111111.00000000
AND运算得网络地址结果:10101100.00010000.00001010.000000000->172.16.10.0
172.16.10.2:10101100.00010000.00001010.000000010
255255.255.255.0:11111111.11111111.11111111.00000000
AND运算得网络地址结果:10101100.00010000.00001010.000000000->172.16.10.0
结果都是172.16.10.0,因此它们在同一个子网络。
总结一下,IP协议的作用主要有两个,一个是为每一台计算机分配IP地址,另一个是确定哪些地址在同一个子网络。
tcp报文
tcp三次握手和四次挥手(https://cloud.tencent.com/developer/news/257281)
- seq(序号):TCP连接字节流中每一个字节都会有一个编号,由本地随机产生,而本字段的值指的是本报文段所发送数据部分第一个字节的序号。
- ack(确认号):表示期望收到的下一个报文段数据部分的第一个字节的编号(确认号指的是期望接收到下一个字节的编号)。
- SYN:当本字段为1时,表示这是一个连接请求或者连接接受报文。
- ACK:仅当本字段为1时,确认号才有效。
- FIN:用来释放一个连接。当本字段为1时,表示此报文段的发送端数据已发送完毕,要求释放运输连接。
===========================================================================================================
数据传送前三次握手
连接建立阶段:
第一次握手:客户端的应用进程主动打开,并向客户端发出请求报文段。其首部中:SYN=1(服务器由SYN=1知道,客户要求建立联机),seq=x,即SYN包。
第二次握手:服务器应用进程被动打开。若同意客户端的请求,则发回确认报文,其首部中:SYN=1,ACK=1(为1时确认号有效),ack=x+1(确认号,回应与x相关的信息),seq=y,即SYN+ACK包。
第三次握手:客户端收到确认报文之后,通知上层应用进程连接已建立,并向服务器发出确认报文,其首部:ACK=1(为1时确认号有效),ack=y+1(确认号),即确认包ACK。当服务器收到客户端的确认报文之后,也通知其上层应用进程连接已建立。
在这个过程中,通信双方的状态如下图,其中CLOSED:关闭状态、LISTEN:收听状态、SYN-SENT:同步已发送、SYN-RCVD:同步收到、ESTAB-LISHED:连接已建立
三次握手,为了初始化Sequence Number的初始值
通信双方需要通知对方自己的Sequence Number,作为以后数据通信的序号,以保证应用层接收到的数据,不会应网络上的传输问题而乱序。
==============================================================================================================
断开时必须是四次挥手,因为有可能数据并没有发送完,不能马上断开。
连接释放过程:
第一次挥手:数据传输结束以后,客户端的应用进程发出连接释放报文段,并停止发送数据,其首部:FIN=1,seq=u。
第二次挥手:服务器端收到连接释放报文段之后,发出确认报文,其首部:ack=u+1,seq=v。此时本次连接就进入了半关闭状态,客户端不再向服务器发送数据。而服务器端仍会继续发送。
第三次挥手:若服务器已经没有要向客户端发送的数据,其应用进程就通知服务器释放TCP连接。这个阶段服务器所发出的最后一个报文的首部应为:FIN=1,ACK=1,seq=w,ack=u+1。
第四次挥手:客户端收到连接释放报文段之后,必须发出确认:ACK=1,seq=u+1,ack=w+1。 再经过2MSL(最长报文端寿命)后,本次TCP连接真正结束,通信双方完成了他们的告别。
在这个过程中,通信双方的状态如下图,其中:ESTAB-LISHED:连接建立状态、FIN-WAIT-1:终止等待1状态、FIN-WAIT-2:终止等待2状态、CLOSE-WAIT:关闭等待状态、LAST-ACK:最后确认状态、TIME-WAIT:时间等待状态、CLOSED:关闭状态
为什么需要四次挥手:
因为tcp是全双工的,发送方和接收方都需要FIN报文和ACK报文。
dns解析域名。
协议部分:http://
域名部分:www.cnblogs.com ip
资源部分:/alex3714
https://www.cnblogs.com/linhaifeng/articles/5951486.html
子网掩码的划分教程:
https://jingyan.baidu.com/article/ae97a646d936ddbbfd461d02.html
以192.168.1.53/27为例讲解
相应掩码为:11111111.11111111.11111111.11100000
以上橙色数字为27位网络号,即网络号向主机号接了3位。(一般C网是24位网络号,后面8位是主机号)
8位主机号减去借去的3位,剩下5位。
最多可容纳的主机数: 2^5 = 32
可用的主机数: 2^5 - 2 = 30(减去网络地址和广播地址)
子网掩码的十进制数是11111111.11111111.11111111.11100000
十进制:(255,255,255,224)
网络号向主机号借了3位(子网地址部分),即分成2^3 = 8个子网。
下面计算网络地址,广播地址,和可用IP
IP地址: 11000000.10101000.00000001.00110101(192.168.1.53)
子网掩码: 11111111.11111111.11111111.11100000
网络地址:11000000.10101000.00000001.00100000(用IP地址、子网掩码and计算,即将IP地址中主机位部分设为0,得192.168.1.32)
广播地址:11000000.10101000.00000001.00111111(网络位+全为1的主机位,将主机位全设为1,得192.168.1.63)
可用的IP范围:192.168.1.33~192.168.1.62(可用主机数30)
各子网的参数如下:
第一子网的IP段为:192.168.1.0~192.168.1.31(32个)
可以主机数: 192.168.1.1~192.168.1.30(30个)
第二子网的IP段为:192.168.1.32~192.168.1.63(32个)
可以主机数: 192.168.1.33~192.168.1.62(30个)
............类推
192.168.1.53/27位于第2子网,也可得可用主机数为192.168.1.33~192.168.1.62(30个)