tcp/ip五层网络模型
这个是现互联网正在运用的模型,还有个参考模型
iso7层网络模型
就是将tcp/ip模型的应用层又划分成了
应用层、表示层、会话层,
当然是iso七层网络模型先提出,然后才有的tcp/ip模型
为什么tcp/ip模型要将七层模型缩减成五层而不是三层四层或者不是将会话层与传输层合并呢?
就目前我的理解来讲,tcp/ip的应用层更适合开发应用,因为不同的应用对七层模型的应用层,表示层,会话层,有不同的需求。需要对其进行修改。
然后到底层的传输层、网络层、链入层、物理层需求基本都是一样的。
以应用层的http协议为例子展示整个网络模型的运行
先讲传输层的三次握手与四次分手
传输层需要建立连接形式是 对称的结构,并且一定能够唯一确定是哪个程序或者线程的连接 ipA+porta:ipB+portb,服务端的port一般都是确定的像tomcat的8080端口;sshd的22端口,mysql的3306端口,不是说这些端口不能改,而是说在进行连接的时候服务端的端口是确定的,不会更改的,但客户端不一样,客户端是随机分配的,客户端的端口数量是65535,但对于不同的ip,是可以使用同一端口号,只要能唯一区分就行。因为tcp协议是面连接的是传输可靠的,为了满足以上需求才进行了三次握手与四次分手,
三次握手具体内容
syn包包含seq和ack再握手阶段的规律是客户端第一次请求的seq随机生成然后服务器返回一个ack=客户端发来的seq+1 再发送一个随机生成的seq给客户端,然后客户端发送一个ack=1;三次握手结束。握手结束后双方就会开辟对应socket资源这就是连接。可靠的是指每次发送请求都会需要ack确认。
三次握手结束后资源开辟出来后就进行数据传输,数据传输中的seq与ack就与三次握手中的有一定区别,首先客户端的第一个seq=1:1+此次发送请求的长度。然后服务器会返回一个ack=客户端发来的seq+1;表示收到消息;然后在发送一个seq=1:1+本次发送的数据长度,ack为回答请求的ack;因为分包的原因,服务器会再发送一个包seq=上次的seq+本次发送的数据长度ack仍然为回答请求的ack;每次数据的发送都会进行ack返回表示收到
4次分手,客户端发送一个FIN,seq为此次请求的seq,服务器收到后会发送一个ack=客户端的seq+1表示收到,如果没有再要传输数据的话,服务器也发送一个FIn,seq=本次数据传输最后的seq也就是上一次的seq,和ack。ack与上次一样表示哪一次的请求。然后客户端返回一个ack,ack为服务器的seq+1,结束;
网络层:
每台电脑都有自己的ip,网关,子网掩码,mac。网络层需要寻址,
子网掩码与ip进行&运算用来计算网络号;
如果说把整个网络的拓扑结构都存入寻址效率低下不说,也不太现实,所以有了“下一跳”即只需记住寻找下一步即可,每个节点都寻找下一跳整个网络就互联起来。寻址知道了要找哪个ip但是不知道怎么将数据传输过去。所以需要链路层
链入层
将客户端的ip与服务器的ip再次封装去寻找包含服务器ip的mac地址。
就是 网络层通过子网掩码已经算出了网关,那么要将数据发送到这个网关,但是我的目的不是找这个网关我的目的是找服务器的ip。所以为了发送本次的数据,所以将数据封装后外面是下一跳的mac地址。到达下一跳的mac后
下一跳的路由会将本次数据解码看到里面的ip,然后发现不是自己的ip,然后就又寻找下一跳,封装,发送直到找到目的ip