网络层次划分
OSI参考模型
每一层作用
物理层:透明的传输比特流(比特Bit)
数据链路层:将比特组装成帧和点到点的传递(帧Frame)
网络层:子网的运行控制,确认从源端到目的端如何选择路由(包Packet)
传输层:第一个端到端、进程到进程,报文传递和错误恢复(段Segment)
会话层:建立、管理和终止会话(会话协议数据单元SPDU)
表示层:对数据进行翻译、加密和压缩(表示协议数据单元PPDU)
应用层:提供访问网路服务的接口(应用协议数据单元APDU)
每一层的设备
物理层:中继器,集线器
数据链路层:网桥,交换机
网络层:路由器
网络层以上:网关
附加:网卡工作在物理层和数据链路层的MAC子层
每一层的协议
TCP/IP模型
OSI七层和TCP/IP模型对应关系如下,每层作用、协议、设备同OSI模型
TCP和UDP(传输层)
TCP和UDP的区别
TCP:传输控制协议,提供面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发、丢弃重复数据、检验数据、流量控制等功能,保证数据能从一端传到另一端。
UDP:用户数据包协议,一个简单的面向数据报的传输层协议,不提供可靠性,只是把应用程序传给IP层的数据报发送出去,但并不保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,所以传输速度很快。
举例说明:
TCP就像打电话,两者之间必须有一条不间断的通路,数据不到达对方,对方就一直等待,除非对方直接挂电话。先说的话先到,后说的话后到,有顺序。
UDP就像寄一封信,发信者只管发,不管到,但是信封上必须写明对方的地址。发信者和收信者之间没有通路,全靠邮电局联系,信发到时可能过了很久,也可能没有发到,先发的信未必先到,后发的信也未必后到。
TCP客户/服务器程序的socket函数
问题:如何编写socket套接字?
答:服务器端:
(1)调用ServerSocket(int port)创建一个服务器套接字,并绑定(bind)到指定端口上。
(2)监听连接请求(listen),调用accept,有接收连接,则返回监听套接字
(3)调用socket类的getOutStream和getInStream获取输出流和输入流,开始网络数据的发送和接收。
(4)关闭通信套接字socket.close
客户端:
(1)调用socket创建一个流套接字,并连接到服务器端。
(2)调用socket类的getOutStream和getInStream获取输出流和输入流,开始网络数据的发送和接收。
(4)关闭通信套接字socket.close
TCP三次握手(建立连接)
第1次握手:建立连接时,客户端发送SYN包(SYN=j)到服务器,并进入SYN_SEND状态,等待服务器确认。
第2次握手:服务器收到SYN包,必须确认客户的SYN(ACK= j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。
第3次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ACK=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成3次握手
附:
客户端的connect在三次握手的第二次返回,而服务器的accept在三次握手的第三次返回
SYN:同步序号,表示此报文是一个连接请求或连接接受报文
ACK:确认位,对接收到报文的确认
问题:TCP采用二次握手可以吗?
答:不可以。采用三次握手是为了防止有效的连接请求报文段突然又传送到服务器,从而发生错误。当客户端发出的客户请求报文段由于某些原因没有及时到达服务器,而客户端在等待一段时间后又重新向服务器发送连接请求,且建立成功,顺序完成数据传输,那么第一发送的连接请求报文段就称为失效的连接请求报文段。考虑这样一种特殊情况,客户端第一次发送的请求连接并没有丢失,而是因为网络问题导致延迟到达服务器,服务器以为是客户端又发起的新连接,于是服务器同意连接,并向客户端发回确认,但是此时客户端不予理会,服务器就一直等待客户端发送数据,导致服务器的资源浪费。
TCP四次挥手(释放连接)
第1次挥手:释放连接时,客户端发送FIN包(FIN=M)到服务器,告诉服务器数据已经发送完毕。
第2次挥手:服务器收到FIN包,对客户端发送确认信号(ACK=M+1),表明我知道了。
第3次挥手:一段时间后,服务器发送FIN包(FIN=N)到客户端,告诉客户端也关闭了数据传送。
第4次挥手:客户端收到FIN包,对服务器发送确认信号(ACK=N+1),表明我知道了。
附:
FIN:终止位,表示发送方完成数据发送,用来释放一个连接
问题:TCP为何采用四次挥手来释放连接?
答:关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了,但是未必你所有数据都发给对方了,所以你未必会马上关闭socket,也即你可能还需要发送一些数据给对方后,再发送FIN报文给对方来表示你没有数据发给对方了,针对每个FIN报文,都需要一次ack报文,所以需要四次挥手。
TCP状态转换图
TCP连接分组交换:建立连接,传送数据,终止连接
网络地址转换NAT、IPv4、IPv6
IP地址划分
IP地址(IPv4)是32bit的二进制数值,通常用点式十进制表示,唯一标识网络中的每台主机或路由器。
传统的IP地址分为A、B、C、D、E五类,由网络号和主机号组成,网络号代表主机所连接到的网络,主机号代表该主机或路由器在网络中的地址。
类别 网络号 /占位数 主机号 /占位数 用途 A(以0开头) 1~126 / 8 0~255 0~255 1~254 / 24 国家级 B(以10开头) 128~191 0~255 / 16 0~255 1~254 / 16 跨过组织 C(以110开头)192~223 0~255 0~255 / 24 1~254 / 8 企业组织
IPv6由128bit制成,用冒号十六进制记法表示
附:特殊用途,不作为主机IP地址的地址
(1)127.0.0.1 :环路自检地址,表示任意主机本身
(2)0.0.0.0 :整个TCP/IP网络
(3)255.255.255.255 :整个TCP/IP网络的广播地址
(4)主机号全为0表示本网络本身,主机号全为1表示本网络的广播地址,
(5)私有IP地址网段,Internet上没使用的地址,如下:
A类 10.0.0.0--10.255.255.255
B类 172.16.0.0--172.31.255.255
C类 192.168.0.0--192.168.255.255
子网划分
各地址默认的子网掩码
A类 255.0.0.0
B类 255.255.0.0
C类 255.255.255.0
使用子网划分时的地址格式
A类:8位+子网x位+主机(24-x)位
B类:16位+子网x位+主机(16-x)位
C类:24位+子网x位+主机(8-x)位
网络常用测试工具
ping
用途:用来检查网络是否通畅或网络连接速度的命令
原理:利用网络上机器IP地址的唯一性,给目标IP地址发送一个数据包,再要求对方返回一个同样大小的数据包来确定两台网络机器是否相互连通、时延是多少
用法:ping www.baidu.com
tracert
用途:路由跟踪实用程序,用于确定IP数据包访问目标所采取的路径
用法:tracert www.baidu.com ;会打印出从当前主机到目的主机所经过的路由地址
telnet
用途:网络测试,如可以用telnet测试80端口的web服务器是否正常工作
用法如下:telnet www.hitsz.edu.cn 80
netstat
用途:监控TCP/IP网络,显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。用于显示与IP、TCP、UDP、ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。
用法:netstat [-a][-e][-n][-o][-p protocol][-r][-s][Interval] ; 一般用netstat -an来显示所有连接的端口并用数字表示。
地址解析协议ARP
根据IP地址获取物理地址(MAC地址)的一个TCP/IP协议。
1:首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系。
2:当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP数据包,该数据包包括的内容有:源主机 IP地址,源主机MAC地址,目的主机的IP 地址
3:当本网络的所有主机收到该ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,如果已经存在,则覆盖,然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址。
4:源主机收到ARP响应包后。将目的主机的IP和MAC地址写入ARP列表,并利用此信息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。
注意:广播(255.255.255.255)发送ARP请求,单播发送ARP响应。
简单介绍几种协议
ICMP协议: 因特网控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息
TFTP协议: 是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。
HTTP协议: 超文本传输协议,是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统
NAT协议:网络地址转换属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术
DHCP协议:动态主机配置协议,是一种让系统得以连接到网络上,并获取所需要的配置参数手段,使用UDP协议工作。具体用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。
DNS协议:域名系统(DomainNameSystem)的缩写,该系统用于命名组织到域层次结构中的计算机和网络服务,可以简单地理解为将URL转换为IP地址。
RARP协议:逆地址解析协议,功能和ARP协议相对,其将局域网中某个主机的物理地址转换为IP地址
RIP协议(路由选择协议) :底层是贝尔曼福特算法,它选择路由的度量标准(metric)是跳数,最大跳数是15跳,如果大于15跳,它就会丢弃数据包。
OSPF协议(路由选择协议) :Open Shortest Path First开放式最短路径优先,底层是迪杰斯特拉算法,是链路状态路由选择协议,它选择路由的度量标准是带宽,延迟。
参考:
计算机网络基础知识总结(重要) - xdyixia - 博客园 (cnblogs.com)
计算机网络基础知识总结 | 菜鸟教程 (runoob.com)
《王道程序员面试宝典》
《程序员面试宝典》