1、ISP
互联网是一种多层次ISP结构,ISP根据覆盖面积的大小分为第一层ISP、区域ISP和接入ISP。互联网交换点IXP允许两个ISP直接相连,而不用经过第三个ISP。
2、主机之间的通信方式
- 客户-服务器(C/S):客户是服务的请求方,服务器是服务的提供方
- 对等(P2P):不区分客户和服务器。
3、计算机网络体系结构
-
五层协议
-
应用层:为特定的应用程序提供数据传输服务,例如HTTP、DNS等协议。数据单位为报文。运输层包括两种协议:传输控制协议 TCP,提供面向连接、可靠的数据传输服务,数据单位为报文段;用户数据报协议 UDP,提供无连接、尽最大努力的数据传输服务,数据单位为用户数据报。TCP 主要提供完整性服务,UDP 主要提供及时性服务。由于应用层协议很多,定义通用的传输层协议就可以支持不断增多的应用层协议。
-
网络层:为主机提供数据传输服务。而传输层是为主机中的进程提供数据传输服务。网络层把传输层传递下来的报文段或者用户数据报封装成分组。
-
传输层:为进程提供通用数据传输服务。
-
数据链路层:网络层针对的使主机之间的数据传输服务。链路层协议是为同一链路的主机提供数据传输服务。数据链路层把网络层传下来的分组封装成帧。
-
物理层:考虑的是怎样在传输媒体上传输数据比特,而不是指具体的传输媒体。物理层的作用是尽可能屏蔽传输媒体和通信手段的差异,使数据链路层感觉不到这些差异。
-
-
OSI七层协议
五层协议没有表示层和会话层,而是将这个功能留给应用程序开发者处理。
1、表示层:数据压缩、加密以及数据描述,这使得应用程序不必关心在各台主机中数据格式不同的问题
2、会话层:建立及管理会话。
3、tcp/ip
只有四层,相当于五层协议中数据链路层和物理层合并为网络接口层
TCP/IP 体系结构不严格遵循 OSI 分层概念,应用层可能会直接使用 IP 层或者网络接口层。
4、数据在各层中的传递
- 数据在自顶向下的传播过程中,需要添加下层协议所需要的首部或尾部;而在向上的过程中不断拆开首部或尾部。
- 路由器只有下面三层协议,因为路由器位于网络核心中,不需要为进程或者应用程序提供服务,因此也就不需要传输层和应用层。
5、关于TCP和UDP连接
TCP是安全的,UDP是不安全的,但是UDP传输比TCP快。
- TCP的三次握手和四次分手
- 第一次握手:建立连接。客户端发送连接请求报文段。将SYN位置为1,Sequence Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认;(发送请求连接)
- 第二次握手:服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态;(对请求连接报文进行确认,并通知客户端)
- 第三次握手:客户端收到服务器的SYN+ACK报文段。然后将Acknowledgment Number设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。(确认连接,双方进入建立连接状态)
断开连接可以是客户端或服务端的任何一方。
- 第一次分手:主机1,设置Sequence Number和Acknowledgment Number,向主机2发送一个FIN报文段;此时,主机1进入FIN_WAIT_1状态;这表示主机1没有数据要发送给主机2了;(主机1请求断开连接)
- 第二次分手:主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段,Acknowledgment Number为Sequence Number加1;主机1进入FIN_WAIT_2状态;主机2告诉主机1,我“同意”你的关闭请求;(主机2同意关闭连接,并进入等待状态)
- 第三次分手:主机2向主机1发送FIN报文段,请求关闭连接,同时主机2进入LAST_ACK状态;(主机2发送请求关闭连接,并进入锁定状态)
- 第四次分手:主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,然后主机1进入TIME_WAIT状态;主机2收到主机1的ACK报文段以后,就关闭连接;此时,主机1等待2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,主机1也可以关闭连接了。(主机1发送关闭连接,主机2关闭连接,主机1等待2msl后没有收到回复就关闭连接)
一次tcp请求的建立及关闭至少进行7次通信,这还不包过数据的通信,而UDP不需3次握手和4次分手。
TCP和UDP的区别
- TCP是面向连接的。虽然说网络的不安全不稳定特性决定了多少次握手都不能保证连接的可靠性,但TCP的三次握手在很大程度上保证了连接的可靠性;而UDP不是面向连接的,UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确接收,当然也不用重发,所以说UDP是无连接的、不可靠的一种数据传输协议。
- 由于UDP的特点,使得其开销更小、数据传输速率更高,因为不必进行收发数据的确认,所以UDP的实时性更好。知道了TCP和UDP的区别,就不难理解为何采用TCP传输协议的MSN比采用UDP的QQ传输文件慢了,但并不能说QQ的通信是不安全的,因为程序员可以手动对UDP的数据收发进行验证,比如发送方对每个数据包进行编号然后由接收方进行验证啊什么的,即使是这样,UDP因为在底层协议的封装上没有采用类似TCP的“三次握手”而实现了TCP所无法达到的传输效率。
- 常见问题:
- TCP服务器最大并发连接数是多少?
端口号的上限是65535,所以服务器理论上的可承载最大并发连接数是65535。实际上并发连接数受限于linux可打开文件数,这个数是可配置的,可以非常大,所以实际上受限于系统性能。#ulimit -n xxx是能打开的数量。
2. TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态?
假设网络不可靠,对方若未收到关闭连接的报文可能会重发FIN报文。
6、Socket长连接
长连接指指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接(心跳包),一般需要自己做在线维持。
短连接是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接。比如Http的,只是连接、请求、关闭,过程时间较短,服务器若是一段时间内没有收到请求即可关闭连接。
socket连接池
Socket连接池就是维护着一定数量Socket长连接的集合。它能自动检测Socket长连接的有效性,剔除无效的连接,补充连接池的长连接的数量。