网络
1、TCP/IP五层模型
1.1、网络传输就是依靠着OSI七层模型一层层走
- 应用层要和别人建立连接发送数据的话,应用层自己要准备HTTTP协议
- 然后去调传输控制层,去三次握手建立连接发送数据包
- 所以要调用网络层来确定数据包在哪里发出去,发到那里去
- 网络层又要来调链路层,找到下一跳的mac物理网卡地址
(数据包有两层:外层是mac物理网卡地址,内层是ip地址)
- 通过ARP协议知道链路层的mac地址:通过广播mac:FFFF发给路由器,路由器会返回自己的mac地址,然后就知道了路由器的mac
- mac地址先通过广播找到路由器,所以mac地址由FFF变为路由器的mac,然后再变成目的主机的mac地址
- 所以mac地址一直都在变化
1.2、 OSI:7层模型:应用层,传输控制层,网络层,链路层,物理层(中间3层放在kernal内核,内核向上提供API接口供给应用层来调用,向下管理所有的硬件)
- 应用层:浏览器,tomcat,HTTP,SSH,FTP
- 传输控制层:TCP(面向连接的,可靠的传输协议),UDP
1)在这里有一个三个握手的概念:
2)客户端发送请求连接的syn数据包
3)服务端返回ack确认(可靠性是通过ack确认机制来实现的和滑动窗口)
4)客户端发送ack确认(最后这一个ack不是多余的,是为了保证CS端的输入输出都没有问题)
5)握完手之后,CS给对方开辟缓冲区(窗口)
1)三次握手是为了确定双方的序列号sequesesNum,从几开始的,后面的数据才能依次排下去
2)第二个呢:是为了确认双方的缓冲区,窗口的大小,两者要一样才行,如果不一样,按照小的来
3)第三个:是为了确认发送的最大报文是几个字节1024/2048
6)四次挥手:
7)客户端发送fin数据包
8)服务端ack确认
9)服务端发fin数据包
10)客户端ack确认
11)双方都同意才会断开连接,释放资源
12)当有乙方不同意时,就不会释放资源 - 网络层:IP,ICMP
- 链路层,物理层
1.3、扩展:建立完连接后,十年没发送数据包,那连接是有效的么?
- 双方都认为是有效的
- 但是一旦建立连接,就会发现连接已经没有了
- 所以就需要有心跳包,是不是的发送一个请求,证明我还活着
- 心跳包就是为了防止超时(建立连接后长时间不通信,就会超时):TCP中的Keep-Alive是心跳检测,为了确保连接还活着,
1.4、扩展:建立连接后,客户端挂了怎么办
- 服务器有一个计时器,没收到一次客户端请求,就会复位
- 计时器的时间是2个小时,时间过了发送一个心跳包检测报文,发送10次,如果都没有回应,就认为客户端已经挂了,就会关闭连接
1.5、扩展:为什么要四次分手?分手为什么是4次的?
- 三次握手是为了建立连接,四次挥手是为了断开连接,释放使用的资源
1.6、计算机中的每个进程已经有Pid了,为什么还要有端口号:
- 进程ID号是不固定的,今天是12121,明天就是21212了
1.7、网络层:
- ip:主机(192.168.150.11)
- netmask:网络掩码,2的8进制位,0~255(255,255,255,0)
- gateway:网关(192.168.150.2)就是下一跳
- DNS:域名解析(将域名解析成IP)
- 本主机所在的局域网的名字:将IP和掩码做与运算(全1得1,有0则0)
- 可以得到192.168.150.0(局域网的网络号)那11表示你在这个局域网的主机号(你的主机号)
- 所以netmask掩码:和ip就可以确认网络号
- 剩下的就是主机号