计算机网络基本知识整理

本基本知识整理及代码源于牛客网C++面试宝典导读,

  网址https://www.nowcoder.com/tutorial/93/e1b14ab2b40a4ef98d9e55830eb48d66

  TCP

  建立连接和断开连接过程:

  建立连接:

  三次握手:

  1.客户端将标志位SYN置为1,随机产生一个值标志位seq=i,将该数据包发送给服务器,客户端进入SYN_SENT状态,等待服务器确认。

  2.服务器收到数据包后由SYN=1知道客户端请求建立连接,服务器将SYN和ACK都置为1,ack=i+1,随机产生seq=j,并将数据包发送给客户端,进入SYN_RCVD状态。

  3.客户端收到确认后,检查ack=i+1,ACK=1,如果正确将ACK置1,ack=j+1,将数据包发送给服务器,服务器检查ack=j+1,ACK=1,如果正确则建立连接。

  为什么要三次握手:

  防止客户端已失效的连接请求传到B,产生错误。

  例如:客户端发送第一个请求,超时后再次发送请求,最后有两个请求到达服务器,如果没有三次握手,则会建立两个连接,而只有一个连接有效,另一个连接则会占用服务器资源。如果采用三次握手,服务器收不到第二个请求确认,则不会建立第二个连接。

  

  三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小信息。

  断开连接:

  四次挥手:

  TCP连接时全双工的,因此每个方向都要单独关闭。

  1.客户端发送FIN报文,停止发送数据,进入FIN_WAIT_1状态,此时客户端还可以接受数据。

  2.服务器收到FIN报文后,发送ACK给客户端,服务器进入CLOSE_WAIT状态,客户端收到后进入FIN_WAIT_2状态。

  3.当服务器没有数据要发送时,发送FIN报文,服务器进入LAST-ACK状态,等待客户端确认。

  4.客户端收到FIN报文后,发送ACK报文,客户端进入TIME_WAIT状态,等待2MSL(报文最大生存时间),然后关闭连接。

   2MSL意义:

  1. 保证最后一次握手能到B,能超时重传。

  2.2MSL后所有报文消失,不会影响下一次连接。

  TCP和UDP

  区别:

  1.TCP是面向连接的传输层协议,在传输数据前要建立好连接

    UDP无连接

  2. TCP是点到点服务,即一条TCP连接只能有两个端点。

      UDP支持一对一,一对多,多对一,多对多通信。

  3. 可靠性

  TCP可靠交付:无差错,不丢失,不重复,按序到达。

  UDP尽最大努力交付,不保证可靠交付。

  4.拥塞控制,流量控制

  TCP有拥塞控制和流量控制保证数据传输的安全性。

  UDP没有拥塞控制,网络拥塞不会影响源主机的发送效率(不保证可靠交付)

  5.报文长度

  TCP是动态报文长度,TCP报文长度是根据接收方的窗口大小和当前网络拥塞情况决定。

  UDP面向报文,不合并不拆分,保留上面传下来的报文边界。

  6.首部开销

  TCP首部开销大,首部20个字节。

  UDP首部开销小,8字节(源端口,目的端口,数据长度,校验和)

  适用场景:

  TCP可靠传输但速度慢,UDP不可靠但速度快。

  完整性选择TCP(文件传输、重要状态更新),实时性则UDP(视频传输,实时通信)

  HTTP协议

  1.协议

  超文本传输协议。

  基于TCP/IP通信协议来传输数据(HTML文件,图片等)

  HTTP是一个属于应用层的面向对象的协议,工作与客户端-服务端架构上,浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求,Web服务器根据接收到的请求后,向客户端发送响应信息。

  2.特点:

  1)简单快速:请求服务时,只需传送请求方法和路径。请求方法常用GET、HEAD、POST。每种方法规定了客户端与服务器联系的类型不同。HTTP协议简单,所以服务器程序规模小,通信速度快。

  2)灵活:可传输任意类型的数据对象。正在传输的类型由Content-Type标记。

  3)无连接:每次连接只处理一个请求,服务器处理完客户请求,收到应答后即断开连接。这种方式可以节省传输时间。

  4)无状态:无状态协议。对失误处理没有记忆能力,缺少状态则需要前面信息重传,会导致每次连接传送数据量增大,但不需要先前信息就会很快。

  5)默认端口80

  3.过程概述

  采用请求/响应模型,客户端向服务器发送请求报文,包含请求方法,URL,协议版本,请求头部很请求数据。服务器以一个状态作为响应,响应内容包含协议版本,成功或错误代码,服务器信息,响应头部和响应数据。

  请求响应步骤如下:

  1.客户端连接到WEB服务器

  首先与服务器80端口建立TCP连接。

  2.发送HTTP请求

  通过TCP套接字连接,客户端向WEB服务器发送一个文本的请求报文。由请求行,请求头部,空行,请求数据4部分组成。

  3.服务器接收请求并返回HTTP响应

  WEB服务器解析请求,定位请求资源,将资源副本写到TCP套接字发送,由客户端读取。响应由状态行,响应头部,空行和响应数据4部分组成

  4.释放TCP连接

  如果connection模式为close,则服务器主动关闭TCP连接,客户端被动关闭,释放TCP连接。若为keepalive,则该连接会保持一段时间,该时间内可以继续接受请求。

  5.客户端解析HTML内容

  浏览器首先解析状态行,查看请求的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,并对其格式化在浏览器中显示。

  HTTP和HTTPS

  区别:

  1. HTTP以明文在网络中传输数据,HTTPS时经过TLS加密后的,具有更高的安全性。

  2. HTTPS在TCP三次握手阶段后,需要进行SSL的握手,协商加密使用的对称加密密钥。

  3. HTTPS需要服务端申请证书,浏览器端安装相应根证书。

  4.HTTP端口为80,HTTPS端口为443

  HTTPS优点:

  传输数据使用密钥加密,安全性更高。

  可以认证用户和服务器,确保数据发送的正确的用户和服务器。

  HTTPS缺点:

  握手延时较高:在对话前需要SSL握手,握手阶段延时增加。

  HTTPS部署成本高:需要使用证书验证自身安全性,需要购买CA证书。需要加解密计算,CPU占用多,需要服务器配置或数目高。

  HTTP返回码

  常见代码:

  200 OK:客户端请求成功。

  300 multiple choices 可选重定向:被请求资源有一系列可供选择的反馈信息,由浏览器/用户自行选择一个。

  301 moved permanently 永久重定向:资源已被永久移动,将来任何对资源的访问都要使用本响应返回的若干URL之一。

  302 move temporarily 临时重定向:请求的资源现在临时从不同的URL获得。

  403 Forbidden:服务器收到请求,但拒绝提供服务。

  404 not found:请求资源不存在。

  OSI七层模型和TCP/IP四层模型OSI:

   

  OSI七层:

  应用层:允许访问OSI环境的手段,主要包括 FTP 文件传输协议HTTP 超文本传输协议DNS域名系统 TFTP 简单文件传输协议,SMTP 简单邮件传输协议,DHCP 动态主机配置协议,TELNET TCP/IP终端仿真协议

  表示层:对数据进行翻译、加密、压缩,主要包括 JPEG、MPEG、ASII(文件编码)。

  会话层:建立、管理和终止对话。主要包括:RPC远程过程调用协议,NFS 文件共享协议,SSL安全套接字层协议

  传输层:提供端到端可靠报文传输和错误恢复,传输段位为报文,主要:TCP、UDP

  网络层:负责数据包从源到宿的传递和网络互连,传输单位为包,主要为:IP、ICMP互联网控制信息协议、ARP地址解析协议(通过网络地址确定物理地址)、RARP反向地址解析协议(允许局域网查找MAC地址对应的IP地址)

  数据链路层:将比特组装成帧和点到点的传递,PPP、VLAN(虚拟局域网)、MAC

  物理层:通过媒介传输。

  

  TCP/IP 四层:

  网络接口层:MAC VLAN

  网络层: IP ARP ICMP RARP.

  传输层:TCP,UDP

  应用层:HTTP,DNS,SMTP,FTP。

  在浏览器中输入网址,会用到计算机网络中什么层,每层干什么的

  在浏览器中输入URP,首先要将URL解析为IP地址,解析需要用到DNS协议。DNF协议首先查询DNS缓存,如果没有就给本地DNS发送查询请求。DNS查询分为两种方式,一种是递归查询,一种是迭代查询。如果是迭代查询,本地DNS服务器向根域名服务器发送查询请求,根域名告知该域名的一级域名服务器,本地服务器再向一级服务器查询,依次类推查询到该域名IP。DNF基于UDP,使用UDP协议。

  得到IP地址,浏览器与服务器建立连接,需要http协议。HTTP生成一个get请求报文,将该报文传给传输层处理,需要用到TCP协议。如果采用HTTPS还会用到HTTPS协议对数据进行加密。传输层对报文进行分片,将数据包发送到网络层,用到IP协议。网络层通过路由选路,一跳一跳发送到目的地址。在网段内寻址通过物理层协议(以太网协议)实现,以太网协议需要知道目的IP地址的物理地址,需要ARP协议。

  1.DNS、HTTP、HTTPS属于应用层

  直接为用户的应用进程提供服务。

  2.TCP/UDP 属于传输层

  负责主机中进程间通信。TCP:面向连接的传输控制协议。UDP:无连接的用户数据包协议,不可靠。

  3.IP协议,ARP协议属于网络层

  负责为分组交换网上的不同主机提供通信。网络层将传输层产生的报文段或数据报封装成分组或包传送。另一个任务是选择合适的路由,使分组能交付到目的主机。

  4.数据链路层

  将网络层交下来的数据包组装成帧,在两个相邻节点间的链路上以帧为单位传输数据。

  5.物理层

  利用物理媒体传送比特流。

  

  TCP拥塞控制

  拥塞窗口cwnd。

  1.慢开始

  最开始发送方拥塞窗口为1,由小到大增加发送窗口和拥塞窗口,每经过一轮cwnd翻倍,当超过慢开始门限时,则使用拥塞避免算法,避免cwnd增长过大。

  2.拥塞避免

  每经过一个往返时间RTT,cwnd增加1。

  在慢开始和拥塞避免过程中,一旦发现网络拥塞(超时),就把慢开始门限设为当前值一般,cwnd为1,重新慢启动。

  3.快速重传

  接收方每次收到一个时序报文段后就立即发出重复确认(能收到确认说明网络没有拥塞),发送方连续收到三个重复确认就立即重传,执行快速恢复。

  4.快速恢复

  将cwnd设为慢开始门限+3(三个重复确认),采用拥塞避免算法。  

  

  TCP如何保证可靠性

  1. 序列号、确认应答、超时重传

  数据到达接收方,接收方需要发出确认应答,并且确认序号会说明下一次需要接受的数据序列号。如果发送方未收到确认应答则可能是发送数据丢失或者应答丢失,这时发送方会等待一定时间后重传,时间一般为2*RTT(报文段往返时间)+ 偏差值

  2. 窗口控制和快速重传

  在窗口大小内,不需要等到应答就可以发送下一段数据。

  如果收到失序的数据,则会发送重复确认应答来提醒发送方。

  3.拥塞控制

  在通信时,网络吞吐量逐渐上升,并在拥堵时降低吞吐量再慢慢上升,网络不会轻易瘫痪。

  TCP/IP数据链路层交换过程

  首先到ARP缓存表查找该目标mac地址,如果查到就将目标ip和mac地址封装到链路层数据包包头。如果没找到,则会发起一个广播,所有收到的广播机器看ip是否是自己的,如果是则以单播形式将mac地址回复给请求的机器。

  怎么区分报文该给哪个应用层序,IP层怎么区分UDP还是TCP报文

  根据端口区分应用程序。

  根据IP头中协议标识字段,17为udp,6是tcp。

  socket网络编程

  服务端:socket-bind-listen-accept

  客户端:socket-connect

原文地址:https://www.cnblogs.com/wshr007/p/11455909.html