网络基础
网络通信概述
网络通信其实就是位于网络中不同主机上面的2个进程之间的通信。
网络通信的层次
(1)硬件部分:网卡
(2)操作系统底层:网卡驱动
(3)操作系统API:socket接口
(4)应用层:低级(直接基于socket接口编程)
(5)应用层:高级(基于网络通信应用框架库)
(6)应用层:更高级(http、网络控件等)
OSI七层网络模型
TCP五层模型:
表示层:解决不同主机的通信的数据格式问题
会话层:建立和管理应用程序之间的通信(连接)(对下层的封装) 方便用户使用,自动收发包 报文
传输层:拆包组包 TCP:保证数据包的完整性 和 以及处理传输过程中可能发生的危险 UDP:发完就完了 报文----拆分成---->包
网络层:路由和地址解析。选择适当的网络节点进行路由。 包 ---->数据帧
数据链路层:控制对物理设备的访问 规定数据如何在不同物理设备上进行传出 并提供数据纠错功能。在不可靠的物理设备上提供可靠传输 数据数据帧
物理层:定义通信的物理设备的规格。网线接口类型,光纤接口类型,传输速率等
因为Socket通信时候用到了IP和端口,仅这两个就表明了它用到了网络层和传输层;而且它无视多台电脑通信的系统差别,所以它涉及了表示层;一般Socket都是基于一个应用程序的,所以会涉及到会话层和应用层。
参考博客:
https://www.cnblogs.com/carlos-mm/p/6297197.html
https://blog.****.net/u011774517/article/details/67631439
三次握手四次挥手:
三次握手:客户端连接服务器
客户端发送SYN包:通知服务器我要连接你 客户端进入半连接状态(syn_sent)
服务器发送SYN+ACK包:ACK包通知服务器我收到请求并分配好了资源 SYN通知客户端你可以连接了(syn_recv)
客户端发送ACK包:客户端服务器同时进入连接状态
为什么是三次握手??
考虑一种情况,当客户端第一次握手时,网络阻塞,服务器没收到,客户端重新发送,服务器客户端正常通信然后关闭连接,关闭后这调阻塞的包到达了服务器,如果是两次握手那么服务器客户端又重新建立了连接,而这条连接是无用的这就浪费了资源。三次握手建立连接,当客户端收到无效的服务器连接包,不会回服务器包,连接就不会建立了。
四次挥手:可以任意一端发起
客户端发送FIN包:我没有数据要发送了 我要关闭连接 客户端进入半关闭状态 fin_wait1 等待服务器回复
服务器回ACK包:ok 我收到你的请求了 客户端进入fin_wait2 等待服务器也能关闭
-----这里服务器还可以发送数据到客户端 --------
服务器发送FIN包:我没有数据要发送了 我也要关闭了 服务器进入半关闭状态 last_ack
客户端发送ACK包:我收到了 TIME_WAIT 服务器关闭
TIME_WAIT:等待2msl 然后关闭连接 客户端关闭
为什么要等待2msl的时间???
一、放置最后一个ack包丢失,如果丢失在这2msl时间内服务器还可以重新发送FIN包
二、确保本次连接所产生的包 可以接收完
为什么要四次握手而不是连接时候的三次?
保证另一端的数据可以发送完
参考博客:
https://blog.****.net/qzcsu/article/details/72861891
https://www.cnblogs.com/thrillerz/p/6464203.html
TCP所谓的连接其实就是维护了一个状态。
TCP:
工作在传输层 tcp对上服务于socket接口 对下调用ip
面向连接 通信前必须连接
tcp自动协商通信速率(每个包大小 每秒包个数) 逐渐调大速率 根据丢包率 测试出最优速率 (滑动窗口)
为什么TCP是可靠的通信???
面向连接
每次发包都会收到回应
丢包重传机制
每个包包含一个校验信息 防止数据丢失
集线器:信号放大 之内对内网使用 采用广播方式通信
交换机:内部维护一张路由表 通过广播方式学习 而不是每次广播
路由器:路由器相当于有2个网卡,一个对内做网关、一个对外做节点。内部对外通信都需要经过路由器。
DNS(Domain Name Service 域名服务):域名转换为IP
我们访问一个网站的流程是:先使用IP地址(譬如谷歌的DNS服务器IP地址为8.8.8.8)访问DNS服务器(DNS服务器不能是域名,只能是直接的IP地址),查询我们要访问的域名的IP地址,然后再使用该IP地址访问我们真正要访问的网站。这个过程被浏览器封装屏蔽,其中使用的就是DNS协议。
DHCP(dynamic host configuration protocl,动态主机配置协议):动态分配子网内主机的IP地址
NAT(network address translation,网络地址转换协议):内网IP转换为外网IP 内网IP只对内有效,内网对外通信时需要NAT将内网IP转换为外网可识别的外网IP
划分子网:
好处:
1.隔离,子网相互隔离
2.减少广播包发送量
3.节省ip资源,可以通过改变子网掩码,将多余的主机位'交给'网络位使用,比如一个公司只有100个ip,如果没有子网这个概念,那分给他一个C类网络,可容纳255个主机,那多余的ip就浪费了。有子网,就可以只分给他一个可容纳他主机数的子网就可以了。其实就是说分配网络是不是以ABC类网络为单位,而是以更小的子网为单位,宏观来说就是节省IP。而从微观上(可连接的主机数)减少了可连接的主机数。
坏处:
1.可连接的主机数减少,各子网中都会有一个网络地址和广播地址
2.通信不便,子网之间不能通信
https://blog.****.net/lycb_gz/article/details/2137852
http://blog.51cto.com/6930123/2113151