网络 HTTP TCP 400

一。网络编程基础知识汇总

网络编程基础 (网盘享学——Netty)
 1.计算机网络体系结构 
      a.OSI七层模型
      b.TCP/IP协议
      c.TCP和UDP 
 2.识别唯一通讯地址:源IP地址 + 目标IP地址 + 协议号 + 源端口号 + 目标端口号 这五个元素识别一个通信     
 3.三次握手和四次挥手
 4.TCP/IP中的数据包
 5.TCP中通过序列号与确认应答提高可靠性
 6.HTTP请求的传输过程
 7.一次完成的http请求的七个过程
    1.建立TCP连接(之前可能还有一个域名解析)                  7.服务器关闭TCP连接
    2.客户端发送请求命令  get/www.xx.com/http/1.1            6.服务器向客户端发送数据
    3.客户端发送请求头信息                                   5 服务器返回响应头信息
    4.服务服务器应答器      Http/1.1  ok
 8.http协议报文结构   请求报文结构 响应报文结构
 9.一些常见术语: socket   短连接   长连接
 10.Linux网络IO模型  5种    
     阻塞I/O   非阻塞I/O   I/O复用   信号驱动    异步I/O
11.原生JDK网络编程:BIO
12.原生JDK网络编程:AIO
13.原生JDK网络编程:NIO之Reactor模式
14.原生JDK网络编程——Buffer

二。报文结构

参考链接
请求报文结构:请求行 请求头 请求主体
响应报文结构:状态行 首部行 实体

在这里插入图片描述
在这里插入图片描述

三。网络分类

  • 局域网 - 城域网 - 广域网 - 互联网 - 等等…

四。网络分层

在这里插入图片描述

五。TCP/UDP

TCP灵魂之问

属于传输层协议,用来通话

  • 通话一般有两种通话方式:第一种是TCP,第二种是UDP。
  • TCP和UDP位于同一层,都是建立在IP层的基础之上。由于两台电脑之间有不同的IP地址,因此两台电脑就可以区分开来,也就可以互相通话了。
  • UDP就好比发电报,发出去就完事了,对方有没有接收到它都不管,所以UDP是不可靠的。
  • TCP传送数据虽然可靠,但传送得比较慢;UDP传送数据不可靠,但是传送得快。

TCP建立连接三次握手,断开连接四次挥手。
网址参考

1. 能不能说一说 TCP 和 UDP 的区别?
    a.首先概括一下基本的区别:
          TCP是一个面向连接的、可靠的、基于字节流的传输层协议。(有连接)
          而UDP是一个面向无连接的传输层协议                   (无连接)
    b.具体分析,和 UDP 相比,TCP 有三大核心特性:
         面向连接:所谓的连接,指的是客户端和服务器的连接,在双方互相通信之前,TCP 需要三次握手建立连接,而 UDP 没有相应建立连接的过程。          
         可靠性: TCP 花了非常多的功夫保证连接的可靠,这个可靠性体现在哪些方面呢?一个是有状态,另一个是可控制。
         基于字节流:UDP 的数据传输是基于数据报的,这是因为仅仅只是继承了 IP 层的特性,而 TCP 为了维护状态,将一个个 IP 包变成了字节流。
    额外.TCP连接可靠性体现在哪两个方面:
         有状态:TCP会精准记录哪些数据发送了,哪些数据被对方接收了,哪些没有被接收到,而且保证数据包按序到达,不允许半点差错。这是有状态
         可控制:当意识到丢包了或者网络环境不佳,TCP会根据具体情况调整自己的行为,控制自己的发送速度或者重发。这是可控制
 
2.  说说 TCP 三次握手的过程?为什么是三次而不是两次、四次?
    a.从最开始双方都处于CLOSED状态。然后服务端开始监听某个端口,进入了LISTEN状态。
    b.然后客户端主动发起连接,发送 SYN , 自己变成了SYN-SENT状态。            ————>一次握手
    c.服务端接收到,返回SYN和ACK(对应客户端发来的SYN),自己变成了SYN-RE      ————>两次握手
    d.之后客户端再发送ACK给服务端,自己变成了ESTABLISHED状态                ————>三次握手
    f.服务端收到ACK之后,也变成了ESTABLISHED状态。

   为什么不是两次?
      根本原因: 无法确认客户端的接收能力。
      分析如下:如果是两次,你现在发了 SYN 报文想握手,但是这个包滞留在了当前的网络中迟迟没有到达,
      TCP以为这是丢了包,于是重传,两次握手建立好了连接。      
      看似没有问题,但是连接关闭后,如果这个滞留在网路中的包到达了服务端呢?
      这时候由于是两次握手,服务端只要接收到然后发送相应的数据包,就默认建立连接,但是现在客户端已经断开了。
      看到问题的吧,这就带来了连接资源的浪费。

   为什么不是四次?
      三次握手的目的是确认双方发送和接收的能力,那四次握手可以嘛?然可以,100 次都可以。
      但为了解决问题,三次就足够了,再多用处就不大了。

   三次握手过程中可以携带数据么?
      第三次握手的时候,可以携带。
      前两次握手不能携带数据。如果前两次握手能够携带数据,那么一旦有人想攻击服务器,那么他只需要在第一次握手中的SYN 报文中放大量数据,
      那么服务器势必会消耗更多的时间和内存空间去处理这些数据,增大了服务器被攻击的风险。
      第三次握手的时候,客户端已经处于ESTABLISHED状态,并且已经能够确认服务器的接收、发送能力正常,这个时候相对安全了,可以携带数据。	
3.  说说半连接队列和 SYN Flood 攻击的关系

六。Http 状态码

请求头响应头

1.状态码

HTTP 400 - 请求无效 HttpStatus.SC_BAD_REQUEST
HTTP 403 - 禁止访问
HTTP 404- 无法找到文件
HTTP 500 - 内部服务器发生错误:HttpStatus.SC_INTERNAL_SERVER_ERROR

import org.apache.http.HttpStatus;
HttpStatus.SC_OK

或者spring的HttpStatus.OK.value();

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飘然生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值