浅谈HTTP、TCP、UDP、IP协议_代码猿人的博客-程序员宝宝

技术标签: 网络协议  tcp/ip  

浅谈HTTP、TCP、UDP、IP协议

概念

(记得深入学习传输协议时候还是在大学的网络工程课程,时间过了近3年了,现在重新拾起这块知识)
start:
图片来源于网络
图片来源于网络

HTTP 报文结构

HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的长度是不确定的。HTTP有两类报文:请求报文和响应报文。

HTTP请求报文:
一个HTTP请求报文由请求行(request line)、请求头部(header)、空行请求数据4个部分组成。
请求报文

  • 请求方法:GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT
  • 请求行:由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。例如,POST /index.html HTTP/1.1。(注意有空格)
    HTTP相应报文:
  • 1xx:指示信息–表示请求已接收,继续处理。
  • 2xx:成功–表示请求已被成功接收、理解、接受。
  • 3xx:重定向–要完成请求必须进行更进一步的操作。
  • 4xx:客户端错误–请求有语法错误或请求无法实现。
  • 5xx:服务器端错误–服务器未能实现合法的请求。
    实例
  • 200 OK:客户端请求成功。
  • 400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
  • 401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
  • 403 Forbidden:服务器收到请求,但是拒绝提供服务。
  • 404 Not Found:请求资源不存在,举个例子:输入了错误的URL。
  • 500 Internal Server Error:服务器发生不可预期的错误。
  • 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常。

TCP UDP

TCP优缺点:

  • TCP的优点: 可靠,稳定 TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。
  • TCP的缺点: 慢,效率低,占用系统资源高,易被攻击 。TCP在传递数据之前,要先建连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间,而且要在每台设备上维护所有的传输连接,事实上,每个连接都会占用系统的CPU、内存等硬件资源。 而且,因为TCP有确认机制、三次握手机制,这些也导致TCP容易被人利用,实现DOS、DDOS、CC等攻击。
  • UDP优缺点:
  • UDP的优点: 快,比TCP稍安全 UDP没有TCP的握手、确认、窗口、重传、拥塞控制等机制,UDP是一个无状态的传输协议,所以它在传递数据时非常快。
  • UDP的缺点:不可靠,不稳定 因为UDP没有TCP那些可靠的机制,在数据传递时,如果网络质量不好,就会很容易丢包。

TCP/IP

TCP/IP 协议栈是一系列网络协议的总和,是构成网络通信的核心骨架,它定义了电子设备如何连入因特网,以及数据如何在它们之间进行传输。TCP/IP 协议采用4层结构,分别是应用层、传输层、网络层和链路层,每一层都呼叫它的下一层所提供的协议来完成自己的需求。由于我们大部分时间都工作在应用层,下层的事情不用我们操心;其次网络协议体系本身就很复杂庞大,入门门槛高,因此很难搞清楚TCP/IP的工作原理,通俗一点讲就是,一个主机的数据要经过哪些过程才能发送到对方的主机上。直接上图:
数据流

补充

在这里插入图片描述
Socket的使用可以基于TCP或者UDP协议。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sun1042445773/article/details/88538342

智能推荐

gmail_如何自定义Gmail的滑动手势_cuma1988的博客-程序员宝宝

gmailAndroid: It’s one of the better Gmail features—swiping across an email in order to archive or delete it. The latest version of Gmail’s Android app lets you customize what swiping does.Android:这是...

iOS 多线程:『RunLoop』详尽总结_普通网友的博客-程序员宝宝

Linux编程点击右侧关注,免费入门到精通!作者丨行走的少年郎https://www.jianshu.com/p/d260d18dd5511.Run Loop简介1.1 ...

sharding-jdbc简单示例_shardingjdbc 示例_城南少年与猫的博客-程序员宝宝

建表语句:CREATE TABLE `t_order_1` ( `order_id` bigint(20) NOT NULL COMMENT '订单id', `price` decimal(10,2) NOT NULL COMMENT '订单价格', `user_id` bigint(20) NOT NULL COMMENT '下单用户id', `status` varchar(50) NOT NULL COMMENT '订单状态', PRIMARY KEY (`order_id`)

ABAP动态自建表维护程序Dynamin Process_weixin_30247307的博客-程序员宝宝

  以前经常会遇到批量上传或修改数据到自建表的需求,所以在想是否可以做一个动态的程序,所有的自建表都可以用这个动态程序来维护。于是就打算试着写动态的程序。程序的要求:动态显示自建表ALV      动态下载Excel模板      根据这个Excel模板批量上传数据      可新增修改删除数据。首先给一个屏幕输入表名,而且要求是Z开头的自建表,因为如果允许标准表修改,准备...

java项目导出为可运行jar包__地才的博客-程序员宝宝

1.选中要导出的项目,右键->export,选中java下的JAR file->next,选择要导出的路径->next,finish。 2.选中导出的jar文件用压缩文件管理器打开 3.有个META-INF目录,把里面的MANIFEST.MF文件拖出来。此时MANIFEST文件内容应该只有下面这一行:        Manifest-Version:1.0

TFS 2010 客户端汇总_tfs客户端下载_shanyou的博客-程序员宝宝

Visual Studio Team System 2008 Service Pack 1 针对 Team Foundation Server 2010 的前向兼容更新(安装程序)http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=cf13ea45-d17b-4edc-8e6c-6c5

随便推点

java 集合 collection内容总结_暴走灬青春的博客-程序员宝宝

collection1.引入: Student [] arr = new Student[5];           //数组存储学生对象arr [0] = new Student("顾雨磊",26);arr [1] = new Student("顾",26);arr [2] = new Student("顾雨",26);arr [3] = new Student("雨磊"

Axure元件库汇总分享_Code1921的博客-程序员宝宝

最近公司要前端参与产品设计的工作,对于从无产品经验的门外汉来说,真的是太难了,而且领导还一直催着要结果,心里面瞬间都一万个。。。。。在奔跑,然后就开始疯狂的查找资料,首先开始的就是《产品经理社区》 《人人都是产品经理》看了一通之后(自我感觉良好)后,就着手Axure操作了起来。 当时找了很多Axure模板rp文件,但是始终有一些不能满足天天逼逼叨叨leader的要求,最近看了一篇不错的分...

EventLoop和EventLoopGroup_程序员小潘的博客-程序员宝宝

EventLoop和EventLoopGroup描述了Netty程序运行所使用的线程模型,通过修改EventLoopGroup,可以让Netty在不同的线程模型间快速切换,甚至可以在Nio和Bio间一键切换。​1. EventLoopGroupEventLoopGroup直译过来叫「事件循环组」,它管理着一组EventLoop。EventLoopGroup实现了Iterable接口,可以通过迭代器遍历它管理的EventLoop。​EventLoopGroup还继承了ScheduledExecu

GetVersion和GetVersionEx函数详解_linrulei11的博客-程序员宝宝

出自:http://flyxxtt.blogbus.com/logs/42705986.htmlWindows API 中有两个函数可以得到系统版本信息:GetVersion和GetVersionEx。      GetVersion这个函数曾经困扰了很多程序员,其本来设计的是在DWORD返回值中用低位的那个字表示MS-DOS的版本号,高位的那个字表示Windows版本号。对于每个字来说,

酉矩阵和次酉矩阵的定义_次酉矩阵定义_仁者见仁智者见智的博客-程序员宝宝

酉矩阵和次酉矩阵的定义酉矩阵定义:若A是n阶复矩阵且满足

自动柜员机是不是微型计算机,计算机模拟试题2.doc_hi 喜欢你的博客-程序员宝宝

判断题(1). 自动柜员机属于微型计算机的一种。(  )????? 正确?????????? 错误(2). 补码减法运算可以转换为补码加法运算实现。(  )????? 正确?????????? 错误(3). 奇偶校验主要用于单个字符通讯时的校验。(  )????? 正确?????????? 错误(4). 奇校验中要求有效数据中有奇数个位为1。(  )????? 正确?????????? 错误(5)...

推荐文章

热门文章

相关标签