网络基础知识

OSI开发式互联参考模型

  • 第一层【物理层】传输比特流。物理设备的标准,数模转换,网卡
  • 第二次【数据链路层】物理寻址,同时将原始比特流转变为逻辑传输线路。 定义如何格式数据进行传输,错误检查和纠正。将比特数据组成帧,交换机工作在这一层,将帧解码,根据帧中的信息,把数据发送到接收方。
  • 第三层【网络层】控制子网的运行,如逻辑编址、分组传输、路由选择。通讯时经过多个节点,如何找到目标节点,最佳路径?将网络地址翻译成物理地址,将数据从发送方路由到接收方,路由器属于网络层,这层数据称为数据包,需要关注的协议Ip协议
  • 第四层【传输层】接受上一层数据,在必要时把数据进行分割,并将这些数据交给网络层,且保证这些数据有效到达对端。需要关注TCP,UDP协议
  • 第五层【会话层】建立和管理应用程序之间的通信。自动收发包,寻址
  • 第六层【表示层】信息的语法语义以及他们之间的关联。解决不同系统通信的语法问题
  • 第七层【应用层】http协议

OSI的实现:TCP/IP四层架构模型

TCP的三次握手

why:ip协议是无连接的通信协议,无法确认包是否按顺序发送,或者包是否被破坏,所以需要由下一层进行控制

报文头:源端口+目的端口+sequence number+acknowledge number+TCPflag

握手是为了建立连接,握手的流程图如下:

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

为了初始化双方的sequence number,作为以后的通讯序号,保证接收到数据乱序

首次握手的隐患–SYN超时

服务器收到客户端的SYN,回复SYN-ACK时客户端掉线,服务端没有收到ACK确认,就会不断重试直到超时,可能遭到SYN Flood攻击。 防护措施:SYN队列满后,通过SYN Cookie,依然可以建立连接

建立连接后,客户端故障怎么办

保活机制:向对方发送探测报文,如果未收到响应则继续发送,达到次数则中断连接

TCP的四次挥手

为什么会有2msl的time_wait的状态

保证有足够时间让对方收到ACK包,避免新旧连接混淆

为什么需要4次挥手

双方都要接收到FIN报文和ACK报文

服务器出现大量CLOSE_WAIT的原因

对方关闭socket连接,我方忙于读或写,没有及时关闭连接

检查代码资源释放,检查线程配置

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

UDP

报文结构:源端口+目的端口+数据包长度+checksum+数据

TCP和UDP的区别

  • 面向连接 vs 无连接(适合消息多播发布)
  • 可靠性(TCP握手,UDP可能丢失)
  • 有序性(TCP有序,UDP无序)
  • 速度(TCP创建连接,较慢)
  • 量级(数据头TCP20字节UDP8字节)

TCP的滑动窗口

TCP的最基础的可靠性来源确认重传机制
发送窗口左边界的数据连续被确认收到,据窗口才可以移动。滑动窗口的大小根据处理能力动态变化

Http协议

1.0->1.1 keep-alive

在浏览器地址栏键入Url,按下回车后经历的流程

  • DNS解析(浏览器依据url逐层查询dns缓存解析url对应的ip(浏览器缓存,系统缓存,路由器缓存。。))
  • TCP连接
  • http请求
  • 服务器处理并返回http报文
  • 浏览器解析渲染页面
  • 释放连接

常见http状态码

1XX 指示信息-请求已接受,继续处理
2XX 成功-请求已成功接收,理解,接收
3XX 重定向-要完成请求必须进一步操作
4XX 客户端错误-请求有语法错误,或者无法实现
400 语法错误,不能理解
401 未授权
403 forbiden
404 notfound
5XX 服务端错误
500 未知错误
503 当前无法处理,连接池满了

Get请求和Post请求的区别

  • 报文上看:get请求将请求信息放在url中,post放在报文体中,get长度限制
  • 数据库看:get符合幂等性和安全性,post不符合(post会提交数据,post每次请求会添加新资源)
  • get可以被缓存,被储存,post不行

cookie和session的区别

解决http请求的无状态

Cookie是客户端的解决方式

session

区别

http和https的区别

socket

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×