TCP/IP协议是什么
TCP/IP协议是一个面向连接的可靠的网络协议
面向连接:一个逻辑概念,它需要自己与目标主机进行三次握手来建立连接才能完成通信。创建连接完成也会进行资源的分配。
可靠的:连接时三次握手确认机制保证自己与目标主机的连接。四次分手机制来保证连接资源的释放。每次接收消息都会返回发送方ack确认包。
什么是三次握手
这个图就表示三次握手的过程,我个人认为他就是为了保证可靠性而进行的一个测试,测试两台主机是否能接受对方的消息,是否能给对方发送消息。如果都没有问题那么建立连接,分配资源,生成socket
什么是四次分手
四次分手其实就是释放资源前确认的过程
为什么需要四次分手
连接的两个主机是不能只顾着自己释放资源的,需要两个人同时同意才能释放资源。如同一对恋人,不能只顾着自己,如果只有一个主机释放了资源另外 一个主机还认为正在建立连接那么就会出现歧义。
注意
HTTP1.0 没有KEEP-ALICE,对于我们用浏览器请求网址时,我们就与服务器建立了连接,如果不保持连接的话,我没每次请求都会有三次握手四次分手,分配资源释放资源的过程,这肯定是不合理的,所以HTTP1.1引入了KEEP-ALIVE放在请求头中用于保持连接。
HTTP协议通信过程
当我们应用层程序请求与目标主机进行通信时,就会把请求信息交给传输控制层,传输控制层接到请求会尝试与目标主机进行建立连接,也就是三次握手,
那么第一个问题来了,传输控制层如何找到目标主机在哪。
首先呢操作系统不可能去维护到达互联网值每一个主机的路径,太多了,没办法实现。所以就引入了一个NEXT JUMP机制。
什么是NEXT JUMP机制
要搞懂这个问题先看这张图
互联网是由多个局域网来组成了,当我们一个局域网来调用其他局域网的主机时我们只需要告诉跳点(中间节点)我要与哪个IP通信。
先解释如何查找跳点
在操作系统中维护者一个路由表,路由表由目标主机号、网关、掩码等组成当传输控制层接收到请求后会通过网络层去route table中去遍历路由表,先将IP地址与掩码进行二进制与运算,再与对应的目标主机号进行对比,如果相等就将请求交给目标主机,如果不等依次类推,这个相等的目标节点就是跳点。
在我们传递数据包时除了ip:port外还需要加一个MAC地址,表示下一个跳点,跳点收到数据包后发现MAC地址是自己的但是IP地址不是自己,先将保中MAC地址拆除,然后在路由表中找到到达目标地址的下一个跳点并添加MAC地址,重复操作直到找到目标主机。
路由表的维护就是由网络层做的,跳点的拆包装包是由数据链路层来做的。而最后的物理层就是由高低电平来传递数据包的。
找到目标主机后就会进行三次握手,建立连接,进行通信。