计算机网络--HTTP协议

news2024/9/27 11:48:17

1.TCP,UDP的对比图

TCP:面向连接的,可靠的,字节流服务;
UDP:无连接的,不可靠的,数据报服务;
在这里插入图片描述
在这里插入图片描述

2.补充网络部分的其他知识点

1).复位报文段

在某些特殊条件下, TCP 连接的一端会向另一端发送携带 RST 标志的报文段,即复位报文段,已通知对方关闭连接或重新建立连接。这里介绍一下三种情况:

1)当户端端程序访问一个不存在的端口时,目标主机给它发送一个复位报文段。
2)异常终止连接。正常情况下,数据交换完成之后,一方给另一方发送 FIN 结束报文段。 TCP 提供了异常终止一个连接的方法,即给对方发送一个复位报文段。一但发送了复位报文段,发送端所有排队等待发送的数据都将被丢弃。应用程序可以使用socket 选项SO_LINGER 来设置发送复位报文段,以异常终止连接。

  1. 处理半打开连接。例如 TCP 一端关闭了连接, 由于网络故障对方没有收到结束报文,对方误以为连接仍然正常。处于这种状态的连接称为半打开连接。此时如果对端向连接写入数据,则会收到本端回复的复位报文段.

2).交互数据流与成块数据流

TCP 按照携带应用程序数据长度可以分为两种:交互数据和成块数据。交互数据仅包含很少的字节。使用交互数据的应用程序对实时性要求极高,比如 telnet、 ssh 等。

成块数据的长度则通过为 TCP 报文段允许的最大数据长度。使用成块数据的应用程序对传输效率要求高,比如 FTP。

3).带外数据

有些传输层协议具有带外(out of Band,OOB)数据的概念,用于迅速通告对方本端发生的重要事件。因此,带外数据比普通数据有更高的优先级,它应该总是立即被发送,而不论发送缓冲区中是否有排队等待发送的普通数据。

带外数据的传输可以使用一条独立的传输层连接,也可以映射到传输普通数据的连接中.实际应用中,带外数据的使用很少见,已知的仅有telnet,ftp等远程非活跃程序.

UDP没有实现带外数据传输,TCP也没有真正的带外数据.不过TCP利用头部中的紧急指针标志和紧急指针两个字段,给应用程序提供了一种传输紧急数据的方式。一般只有一个字节数据。 TCP的紧急方式利用传输普通数据的连接来传输紧急数据.这种紧急数据的含义和带外数据类似,因此后文也将TCP紧急数据称为带外数据.

4).recv和send的最后一个参数

recv和send最后一个参数flag为数据的收发提供了额外的控制,它可以取下图所示选项中的一个或几个的逻辑或.
如果不用flag,完全可以用read,write代替(但是网络这里建议还是用send和recv):

//服务器端:
...
char buff[128];
// recv(c,buff,127,0);
   read(c,buff,127);
   printf("buff=%s\n",buff);
 // send(c,"ok",2,0);
    write(c,"ok",2);
...
 
    
//客户端
...
 printf("input:\n");
    char buff[128];
    fgets(buff,127,stdin);
   // send(sockfd,buff,strlen(buff),0); 
    write(sockfd,buff,strlen(buff));   

    memset(buff,0,128);
    //recv(sockfd,buff,127,0);
     read(sockfd,buff,127);
    printf("read:%s\n",buff);
...

5).高性能服务器程序框架:C/S模型

TCP/IP协议在设计和实现上并没有客户端和服务器的概念,在通信过程中所有机器都是对等的.但由于资源(视频,新闻,软件等)都被数据提供者所垄断,所以几乎所有的网络应用程序都很自然地采用了如下图所示的C/S(客户端/服务器)模型:所有客户端都通过访问服务器来获取所需的资源.

6).高性能服务器程序框架:p2p模型

P2P(Peer to Peer,点对点)模型比C/S模型更符合网络通信的实际情况.它摒弃了以服务器为中心的格局,让网络上所有主机重新回归对等的地位.

P2P模型使得每台机器再消耗服务的同时也给别人提供服务.这样资源能够充分,自由地共享.云计算机群可以看作P2P模型地一个典范.但P2P模型的缺点也很明显:
当用户之间传输的请求过多时,网络的负载将加重.
下图所示的P2P模型存在一个显著的问题,即主机之间很难互相发现,所以实际使用的P2P模型通常带有一个专门的发现服务器,这个发现服务器通常还提供查找服务(甚至还可以提供内容服务),使每个客户都能尽快地找到自己需要的资源.

从编程角度来讲,P2P模型可以看作C/S模型的扩展:每台主机即是客户端,又是服务器端.因此,我们仍然采用C/S模型来讨论网络编程.

7)套接字API

套接字API最初是为Unix操作系统开发的,但现在几乎所有的操作系统和语言中都有其变体存在.
所以socket编程流程显得尤为重要;

tcp编程流程:socket,bind,listen,accept,recv,send,close(7步); socket,connect,send,recv,close(5步);
udp编程流程:socket,bind,recvfrom,sendto,close(5步); socket,sendto,recvfrom,close(4步);
8)TIME_WAIT补充

3.HTTP 协议与 web 服务器

1).浏览器与服务器通信过程
浏览器与 web 服务器在应用层通信使用的是 HTTP 协议(超文本传输协议),而 HTTP协议在传输层使用的是 TCP 协议。那么浏览器需要和 web 服务器三次握手建立连接后,才可以发送 HTTP 请求报文,服务器收到请求报文后,向浏览器回复 HTTP 应答报文。

浏览器向服务器发起连接前,需要得到服务器的 IP 及端口。用户在浏览器中通常只输入网址(网站域名) ,浏览器会通过 DNS 服务查询获取到服务器的 IP 地址。 对于端口来讲,使用 HTTP 协议的程序一般默认使用 80 端口。
浏览器服务器建立连接后,如果两次以上的请求复用同一个 TCP 连接,则称之为长连接。如果浏览器发送一次请求报文,服务器回复一次应答就断开连接,下次交互再重新进行三次握手建立连接,那么就被称作短连接。使用长连接显然是更好一些,可以减少网络中的同步报文,也使得服务器的响应速度变快。

http属于应用层,它在传输层使用的是tcp协议;
传输层协议:tcp 协议和udp协议;

2).常见的 web 服务器有:

◼ Apache: 简单、速度快、性能稳定,并可做代理服务器使用
◼ IIS(Internet Information Server):安全性、强大、灵活
◼ Nginx:小巧而高效,可以做高效的负载均衡反向代理
◼ Tomcat:技术先进、性能稳定、免费
3).浏览器与服务器通信过程(面试重点)

a)浏览器与服务器通信过程

在这里插入图片描述

(1)浏览器从URL中解析出服务器的主机名.
(2)浏览器将服务器的主机名转换成服务器的IP地址;
(3)浏览器将端口号(如果有的话)从URL中解析出来.
(4)浏览器建立一条与Web服务器的TCP连接;
(5)浏览器向服务器发送一条HTTP请求报文;
(6)服务器向浏览器回送一条HTTP响应报文;
(7)关闭连接,浏览器显示文档;

b)DNS

域名系统(英文:Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用UDP端口53。

浏览器要将URL解析为IP地址,解析域名就要用到DNS协议,首先主机会查询DNS的缓存,如果没有就给本地DNS发送查询请求。DNS查询分为两种方式,一种是递归查询,一种是迭代查询。如果是迭代查询,本地的DNS服务器,向根域名服务器发送查询请求,根域名服务器告知该域名的一级域名服务器,然后本地服务器给该一级域名 服务器发送查询请求,然后依次类推直到查询到该域名的IP地址。DNS服务器是基于UDP的,因此会用到UDP协议。

以下内容了解即可.

c)URL

URL:统一资源定位符,URL是资源标识符最常见的形式.
URL描述了一台特定服务器上某资源的特定位置.它们可以明确说明如何从一个精确,固定的位置获取资源.

自己实现HTTP服务器

简单版:
理解HTTP服务器编程流程;


#include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
 #include <string.h>
 #include <assert.h>
 #include <sys/socket.h>
 #include <arpa/inet.h>
 #include <netinet/in.h>
#include <fcntl.h>
int create_socket()
{
    int sockfd=socket(AF_INET,SOCK_STREAM,0);
    if(sockfd==-1)
    {
        return -1;
    }

    struct sockaddr_in saddr;
    memset(&saddr,0,sizeof(saddr));

    saddr.sin_family=AF_INET;
    saddr.sin_port=htons(80);
    saddr.sin_addr.s_addr=inet_addr("127.0.0.1");

    int res=bind(sockfd,(struct sockaddr *)&saddr,sizeof(saddr));
    if(res==-1)
    {
        return -1;
    }

   res=listen(sockfd,5);
   if(res==-1)
   {
       return -1;
   }

   return sockfd;

}
int main()
{
   int sockfd=create_socket();
   assert(sockfd!=-1);

   struct sockaddr_in caddr;
   int len=-1;
   int c=-1;
    
   while(1)
   {
       len=sizeof(caddr);

       c=accept(sockfd,(struct sockaddr *)&caddr,&len);    
       if(c<0)    
       {
           continue;    
       }

       char buff[1024]={0};    
       int n=recv(c,buff,1023,0);    
       printf("n=%d,read:\n",n);    
       printf("%s\n",buff);    

      send(c,"welcome to quzijie!",19,0);    
       close(c);//短链接    

   }
   exit(0);    
}

本篇完!🍗

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2169882.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【通知】“长三角档案数字资源长期保存与数据安全治理”专题培训

关注我们 - 数字罗塞塔计划 - 为加强长三角地区档案数字资源长期安全管理&#xff0c;提升档案管理人员档案信息化水平和实务技能&#xff0c;推动长三角地区档案数字化转型向纵深发展&#xff0c;上海市档案服务和教育中心将于近期举办“长三角档案数字资源长期保存与数据安全…

【裸机装机系列】16.kali(ubuntu)-安装linux和win双系统-重装win11步骤

推荐阅读&#xff1a; 1.kali(ubuntu)-为什么弃用ubuntu&#xff0c;而选择基于debian的kali操作系统 注意&#xff1a; 要先装windows&#xff0c;再装linux&#xff0c;不然linux的启动分区会被覆盖掉。为什么双系统要先装windows呢&#xff1f; 在一个新硬盘上&#xff0…

旺店通ERP集成金蝶K3(金蝶K3主供应链)

源系统成集云目标系统 金蝶K3介绍 金蝶K3是一款ERP软件&#xff0c;它集成了供应链管理、财务管理、人力资源管理、客户关系管理、办公自动化、商业分析、移动商务、集成接口及行业插件等业务管理组件。以成本管理为目标&#xff0c;计划与流程控制为主线&#xff0c;通…

原生APP与其他类型APP的对比

移动应用主要分为原生APP、混合APP和Web APP三种。每种类型都有其独特的优势和局限性。 原生APP 优点&#xff1a;性能卓越&#xff1a; 直接调用设备硬件&#xff0c;运行流畅&#xff0c;用户体验最佳。用户界面定制化程度高&#xff1a; 可以充分利用平台的UI组件&#xff…

SD卡认识——SDIO协议入门与实践(一)

最初是三年前&#xff0c;接手开发sdio裸机驱动和测试用例的工作&#xff0c;内容很多&#xff0c;一开始就是各种在官网、各大论坛以及开源的驱动和例程里学习&#xff0c;简单浏览了sdio控制器、SD卡、MMC、SDIO卡等协议&#xff0c;然后就是开干&#xff1b;鉴于sdio协议还是…

Java GC:GC算法、GC回收器、GC日志

文章目录 基本概念垃圾回收类型垃圾回收算法垃圾回收器 VM参数设置控制vm参数内存参数GC参数 GC实例分析 基本概念 垃圾回收类型 Minor GC:对新生代进行的垃圾回收&#xff0c;所以也叫Young GCMajor GC:对老年代进行的垃圾回收&#xff0c;所以也叫Old GCFull GC:对整个Java…

无人机的作战指挥中心-地面站!

无人机与地面站的关系 指挥与控制&#xff1a;地面站是无人机系统的核心控制部分&#xff0c;负责对无人机进行远程指挥和控制。无人机根据地面站下达的任务自主完成飞行任务&#xff0c;并实时向地面站反馈飞行状态和任务执行情况。 任务规划与执行&#xff1a;地面站具备任…

Laravel部署后,CPU 使用率过高

我在部署 Laravel 应用程序时遇到严重问题。当访问量稍微大一点的时候&#xff0c;cpu马上就到100%了&#xff0c; 找了一大堆文档和说明&#xff0c;都是说明laravel处理并发的能力太弱&#xff0c;还不如原生的php。最后找到swoole解决问题。 1、php下载swoole插件&#xff0…

智能监控,守护绿色能源:EasyCVR在电站视频监控中心的一站式解决方案

随着科技的飞速发展&#xff0c;视频监控技术在社会安全、企业管理及智慧城市建设等领域中扮演着越来越重要的角色。特别是在电力行业中&#xff0c;电站作为能源供应的关键设施&#xff0c;其安全性和稳定性至关重要。传统的人工监控方式已难以满足现代电站复杂多变的运行需求…

Sql Server时间转换之查询时间格式不对--CONVERT(NVARCHAR,CreateTime,23) 转换出来有时分秒

错误&#xff1a;CONVERT(NVARCHAR,CreateTime,23) 转换出来有时分秒 SELECT TOP 10 CONVERT(NVARCHAR,CreateTime,23) FROM table A 解决办法&#xff1a;限制转换的字符串长度 SELECT TOP 10 CONVERT(NVARCHAR(10),CreateTime,23) FROM table A

Android 通过自定义注解实现Activity间跳转时登录路由的自动拦截

应用场景 在Android 中部分软件需要登录才能使用&#xff0c;但是有的页面又不需要登录&#xff0c;Android不同于Web可以直接拦截重定向路由&#xff0c;因此如果在Android中如果需要检测是否登录&#xff0c;如果没登录跳转登录的话就需要再每个页面中判断&#xff0c;当然也…

不会写SD WebUI 的负面提示词?用这几款Embedding模型一键搞定!效果好到爆炸!

文章目录 一、Embedding 模型简介二、负面提示词 Embedding三、Embedding 资源下载四、Embedding 安装与使用关于AI绘画技术储备零基础AI绘画学习资源介绍&#x1f449;stable diffusion新手0基础入门PDF&#x1f448;&#x1f449;AI绘画必备工具&#x1f448;&#x1f449;AI…

MySQL重点,面试题

一、 聚合函数 分类 COUNT&#xff1a;统计行数量SUM&#xff1a;获取单个列的合计值AVG&#xff1a;计算某个列的平均值MAX&#xff1a;计算列的最大值MIN&#xff1a;计算列的最小值 二、SQL关键字 分页&#xff1a;limit SELECT * FROM student limit 100,6; 倒序 desc s…

数据结构 ——— 移除 nums 数组中的 val 元素(快慢指针)

目录 题目要求 代码实现&#xff08;快慢指针&#xff09; 题目要求 编写函数&#xff0c;给你一个数组 nums 和一个值 val&#xff0c;你需要在 nums 数组 原地 移除所有数值等于 val 的元素&#xff0c;并且返回移除后数组的新长度 不能使用额外的数组空间&#xff0c;要…

11.全面学习面向对象技术

面向对象开发 相关概念 对象&#xff1a;由数据及其操作所构成的封装体&#xff0c;是系统中用来描述客观事务的一个实体&#xff0c;是构成系统的一个基本单位。一个对象通常可以由对象名、属性和方法3个部分组成。类&#xff1a;现实世界中实体的形式化描述&#xff0c;类…

MySQL_插入、更新和删除数据

课 程 推 荐我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448;入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448;虚 拟 环 境 搭 建 &#xff1a;&#x1…

如何禁止电脑蓝牙?五个有效方法教给你!小白必看!

在生活和工作中&#xff0c;蓝牙是一种非常方便的无线技术&#xff0c;可以连接鼠标、键盘、耳机等设备。 然而&#xff0c;蓝牙同时也是信息泄露的潜在渠道&#xff0c;特别是在公共场所或公司内部环境中&#xff0c;可能会带来安全隐患。 想要保护隐私或防止电脑与未经授权…

基于YOLOv8目标检测与chef-transformer(T5)从图像创建食谱

前言 在本文中&#xff0c;将演示如何使用从Roboflow获得的开源产品数据来训练我的YOLOv8模型&#xff0c;然后将其与从Hugging Face获得的chef-transformer&#xff08;T5&#xff09;模型集成。应用程序的主要目标是将检测到的对象参数化地发送到语言模型&#xff0c;并在NL…

第05-3节:加载流程原理介绍(Done)

我的后端学习大纲 我的Linux学习大纲 本节目标 1.能够说出交互式Shell与非交互式Shell2.能够说出登录Shell与非登录Shell环境 1.1.Shell工作环境介绍 用户进入linux系统就会初始化Shell环境, 这个环境会加载全局配置文件和用户个人配置文件中环境变量.每个脚本文件都有自己的…

STM32嵌入式编程学习到提高:【4】UART串口打印

------------------------------------------------------------------------------------------------------------------------- 工程文件&#xff1a;放在百度云盘里&#xff0c;需要的自行下载&#xff01;&#xff01;&#xff01; 链接: https://pan.baidu.com/s/14gRne…