计算机网络通信总结

目录

      • OSI参考模型
      • TCP/IP
      • TCP
        • TCP的报文结构
        • TCP的特点
        • TCP的3次握手
        • TCP的4次挥手
      • UDP
        • UDP的报文结构
        • UDP特点
        • TCP、UDP的区别
      • HTTP
        • HTTP的请求结构
        • HTTP的响应结构
        • HTTP 请求-响应过程
        • 浏览器地址栏输入url,按下Enter以后的过程
        • HTTP状态码
        • HTTP的特点
        • GET、POST的区别
        • Session、Cookie
        • HTTP、HTTPS
        • HTTP 2.0
      • 滑动窗口
      • 短连接与长连接

 

OSI参考模型

物理层
①定义物理设备的标准,比如网线的类型、光纤接口的类型、各种传输介质的传输速率;②传输比特流,将比特流(二进制数据)转换为电信号、光信号进行传输,到达目的地后再转换为比特流,即模数转换、数模转换。网卡就是工作在这一层的
 

数据链路层
①传输比特流时可能会发生错传、数据传输不完整的问题,数据链路层定义了如何格式化数据、如何访问物理机,提供错误检测、纠正的功能,确保传输的可靠性;②将比特数据组装成帧进行传输,交换机工作在这一层,交换机收到后对帧解码,根据帧中包含的物理机信息把帧发送给正确的接收方
 

网络层
①将网络地址(ip地址)翻译成对应的物理地址(mac地址),并决定数据如何从发送方路由到接收方,通过综合考虑发送优先权、网络拥塞程度、服务质量以及可选路由的时间花费,选择从发送方到接收方的最佳路径,路由器属于这一层,这一层的数据称为数据包,这一层的主要协议是tcp/ip中的ip协议
 

传输层
传输层是OSI7层模型中最重要的一层,解决了主机将的数据传输、传输质量问题。①基于流量控制、接收方可接收数据的快慢程度规定适当的发送速率,②按照网络传输的最大尺寸(带宽),将数据强制切割为较小的数据片,并对数据片编号,接收方收到数据片后根据编号排序,组装数据片得到完整数据。这一层的主要协议是tcp/ip中的tcp、udp协议
 

会话层
管理应用程序之间的通信,自动收发包、自动寻址
 

表示层
进行数据的格式化、编码解码、加密解密、压缩解压
 

应用层
规定发送方、接收方必须使用固定长度的消息头,消息头必须含有指定部分,消息头必须记录消息体的数据长度等信息,以使应用更加方便地使用接收到的数据。这一层的主要协议是tcp/ip中的http协议
 

计算机网络通信总结_第1张图片

计算机网络通信总结_第2张图片
发送方是自上而下,接收方是自下而上。

 

TCP/IP

TCP/IP是一个协议簇,不仅仅是TCP、IP协议。OSI相当于网络通信的规范,侧重于理论设计,TCP/IP相当于具体实现,侧重于实现。
计算机网络通信总结_第3张图片

计算机网络通信总结_第4张图片
处理头部数据:发送方自上而下,接收方自下而上。
 
ip协议负责将数据包路由到目的地,但ip协议没有确认数据包是否按顺序发送、是否被破坏,ip协议是不可靠的,需要由上层协议来做出控制。

 

TCP

TCP是一种传输控制协议
 

TCP的报文结构

计算机网络通信总结_第5张图片
ip唯一标识主机,port唯一标识主机上的程序,ip、port共同组成套接字(socket)。

序号即数据包的编号,用于确认数据包是否丢失。滑动窗口用于控制流量、数据发送速率。校验和用于确认数据包中的数据是否无误。

 

TCP的特点
  • 面向连接、可靠、基于字节流,将应用层的数据流分割为报文段,通过ip协议路由到目的地
  • 区分客户端、服务端
  • 支持滑动窗口,通过滑动窗口来控制流量、数据发送速率
  • 支持错误重传。tcp将数据包编号,对方收到则返回ack确认,如果在指定时间内未返回ack确认,则认为传输失败自动重传,以此保证数据包不丢失(完整性)
  • 使用奇偶校验和来检验数据是否有误,保证数据的正确性。发送、接收时都要计算校验和,比较发送、接收的奇偶校验和是否一致

 

TCP的3次握手

为什么需要3次握手才能建立起连接?

为了初始化Sequence Number,通信双方都要告知对方自己的Sequence Number值,这个值要作为后续数据通信的序号,tcp用这个值来拼接数据、保证接收到的数据不会乱序。

计算机网络通信总结_第6张图片

计算机网络通信总结_第7张图片

 

TCP的4次挥手

4次挥手由客户端、服务端任一方的close()触发。
 

为什么需要4次挥手才能断开连接?
因为tcp是全双工的,发送方、接收方都需要FIN报文、ACK报文,2*2=4。全双工:双方都可以发送数据、接收数据,半双工:只能一方发送、一方接收。

计算机网络通信总结_第8张图片

计算机网络通信总结_第9张图片
 

为什么会有TIME_WAIT状态?

  • 确保有足够的时间让对方收到ack包
  • 避免新旧连接混淆

 

查看TIME_WAIT、CLOSE_WAIT、FIN_WAIT、ESTABLISHED"的数量

netstat -n | awk '/^tcp/{++S[$NF]}END{for(a in S) print a,S[a]}'

 

服务器出现大量TIME_WAIT状态的原因?

客户端关闭socket,服务器忙于读、写,没有及时关闭连接。解决方式:

  • 检查释放资源部分的代码
  • 检查处理请求的线程配置

 

UDP

UDP的报文结构

计算机网络通信总结_第10张图片
 

UDP特点
  • 不面向连接,不维护连接状态,可以同时向多个主机发送同一条消息
  • 数据包小,不支持滑动窗口、错误重传,传输速度更快
  • 不区分客户端、服务端
  • 是不可靠传输,尽最大努力交付,不保证交付成功

 

TCP、UDP的区别
  • tcp面向连接、要维护连接状态,区分客户端、服务端;UDP不面向连接、不维护连接状态,不区分客户端、服务端
  • tcp提供可靠传输,udp不可靠,只是尽最大努力交付
  • tcp接收报文无序,但最终要报头携带的序号进行组装,udp无序
  • tcp报头体积大,udp报头体积小
  • tcp速度慢,udp速度快

 

HTTP

http是超文本传输协议
 

HTTP的请求结构

计算机网络通信总结_第11张图片
 

HTTP的响应结构

计算机网络通信总结_第12张图片
 

HTTP 请求-响应过程
  • 客户端连接到web服务器
  • 客户端发送http请求
  • 服务器接收http请求并返回响应
  • 释放tcp连接
  • 客户端解析响应

 

浏览器地址栏输入url,按下Enter以后的过程
  • dns解析,获取域名对应的ip地址
  • 建立tcp连接
  • 浏览器发送http请求
  • 服务器处理请求并返回http报文
  • 浏览器解析响应
  • 连接结束

 

HTTP状态码
  • 1xx:服务器已接收请求,正在处理
  • 2xx:成功
  • 3xx:重定向
  • 4xx:客户端错误
  • 5xx:服务端错误

 

HTTP的特点
  • 使用客户端/服务器模式
  • 简单快速、灵活
  • 无连接、无状态(不维护连接状态)

 

GET、POST的区别
  • http报文层面:get将请求参数放在url中,不安全,携带的数据有限制;post放在请求体中,安全,携带的数据量无限制
  • 数据库层面:get幂等、安全,post非幂等、不安全
  • 缓存:get请求可以被缓存、收藏,post则不能

 

Session、Cookie

http不能保持连接状态,用会话保存用户信息,常用的会话技术有2种:Cookie、Session。
 

Cookie
当用户访问某个网站时,服务器用cookie存储用户信息,把cookie放在响应头中传给浏览器,浏览器把cookie存储到本地计算机上。当用户再次访问该网站时,浏览器自动在请求头中加上该网站的cookie,cookie随http请求一起发送给该网站的服务器,服务器解析请求头中的cookie,获取用户信息。

 

Session
使用session对象存储会话信息,保存在服务器内存中,使用SessionId来唯一标识一个session对象 ,SessionId通过Cookie技术进行存储。服务器自动把SessionId放到cookie中保存到浏览器上,浏览器访问网站时自动在http请求头中携带该网站的cookie,服务器自动从请求头的cookie中获取SessionID,确定对应的session对象。

session超时:如果客户端、服务器在指定时间(默认30min)内未进行过通信,服务器会自动删除内存中对应的session对象。如果session中可能有需要持久化的数据,应该设置监听,session超时时自动持久化session中的数据到数据库。

 

Cookie、Sessio的比较

  • cookie把会话信息保存在浏览器上,session把会话信息保存在服务器上内存中
  • cookie把数据存储在用户计算机上,不安全;session把数据存储在服务器上,更加安全,但会加大服务器的内存开销
  • 如果考虑减轻服务器负担,使用cookie

 

HTTP、HTTPS

计算机网络通信总结_第13张图片http请求发送的数据、http响应返回的数据很容易被截获,https是安全版的http,在http的基础上增加了安全防护。

ssl (安全套接层)是为网络通信安全、数据完整性提供的一种协议,是操作系统对外提供的API,ssl3.0后更名为tls,ssl采用身份验证、数据加密保证网络通信的安全、数据的完整性。

 

加密方式

  • 对称加密:加密、解密使用同一个秘钥。安全性低但性能高
  • 非对称加密:加密、解密使用的秘钥不相同,分为公钥、私钥,使用其中一个来加密,另一个来解密。安全性高但性能低。
  • 哈希算法:将任意长度的数据转换为固定长度的值,算法不可逆,常见的比如md5加密
  • 数字签名:在原数据的末尾添加一段加密后的哈希值,以确保数据不被修改,证明数据、文件的身份

单一使用某种加密算法不安全,https使用加密算法+证书的方式。

 

https的数据传输过程
计算机网络通信总结_第14张图片
 

http、https的区别
计算机网络通信总结_第15张图片
https比http安全很多,但不是绝对安全。

 

HTTP 2.0

相比于http1.x,http2.0支持多路复用,可以在一个http连接上发送多次请求,极大地提高了性能。
 

IP是网络层协议,TCP、UDP是传输层协议,HTTP是应用层协议。

 

滑动窗口

计算机网络通信总结_第16张图片

  • 发送数据包时,是切割为有序的小数据包,多个数据包一起发送,接收方一同返回多个ack接收确认。
  • 滑动窗口之前的数据包编号是已发送并接收到对方ack确认的,滑动窗口中的数据包是已发送但未收到对方ack确认的数据包、已读入内存但尚未发送的数据包,滑动窗口后的数据包是尚未读入到内存中的数据包。
  • 接收到对方返回的ack确认后,滑动窗口会右移,读取未发送的数据包到内存,发送待发送的数据包。
  • 接收方需要都收到之前序号的数据包,才返回ack确认。比如发送方一次发送了4、5、6三个数据包,接收方只收到了5、6,则接收方等到收到了数据包4时才会(4、)5、6的ack确认。
  • 如果发送方迟迟没有收到ack确认,存在失败重传机制,会重新发送指定未发送成功的数据包。
  • 滑动窗口可以动态调整窗口大小,以控制数据包发送速度。窗口大小可以为0。

 

短连接与长连接

  • 短连接:连接->传输数据->关闭连接,每进行一次http操作,就建立一次连接,任务结束就中断连接。短连接常用于并发量大、每个客户端不需要频繁操作的场景。
  • 长连接:连接 -> 传输数据 -> 保持连接 -> 传输数据 -> … -> 关闭连接,建立socket连接后会保持一段时间的连接。建立连接需要3次握手,很耗时,长连接可以减少建立连接的时间开销,常用于操作频繁的场景,比如数据库连接、点对点通讯。

http可以显式指定是否建立长连接 Connection:keep-alive,http1.1默认进行长连接。

你可能感兴趣的:(计算机理论,计算机网络通信,OSI,TCP/IP,TCP,UDP,HTTP)