浅谈HTTP,TCP,UDP
来源:互联网 发布:淘宝lol账号交易平台 编辑:程序博客网 时间:2024/04/30 15:37
最近在学抓包,同时把网络协议补了补,今天总结下吧。
HTTP,TCP,UDP,这三者的关系我以前总是分不清,其实它们都是一个协议集合里面的——即TCP/IP协议
TCP/IP协议有四层:
应用层(有FTP、HTTP、TELNET、SMTP、DNS等协议)
运输层 (有TCP,UDP协议)
网络层 (有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议)
网络接口层
一.Http协议
即超文本传输协议,它是一个基于请求/响应模式的、无状态的协议。
请求/响应模式:就是发送一个请求的http消息给指定的网址,然后该网站服务器返回带有html的响应消息给浏览器
无状态:就说一个客户端的两次请求对于服务器都是全新的,服务器不知道这两次请求都是同一客户端。所以有sessio等会话保存的机制
Http消息分为两种:请求消息和响应消息。
两种消息结构大同小异,现在具体说说。
1.request消息
request消息分为三个部分:请求行,header,body(header和body之间有个空行)
第一行中的Method表示请求方法,比如"POST","GET", Path-to-resoure表示请求的资源, Http/version-number 表示HTTP协议的版本号
当使用的是"GET" 方法的时候, body是为空的。
例如访问www.baidu.com,浏览器发送http消息:
GET https://www.baidu.com/ HTTP/1.1
Host:www.baidu.com
Connection:keep-alive
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/45.0.2454.101 Safari/537.36
Accept-Encoding:gzip, deflate, sdch
Accept-Language:zh-CN,zh;q=0.8
Cookie:BAIDUID=0811FDD02B704994CC4A74E4BD0E9DFB:FG=1;BIDUPSID=0811FDD02B704994CC4A74E4BD0E9DFB;PSTM=1441592438;ispeed_lsm=1;BD_UPN=12314353
(绿色代表消息行,蓝色代表header)
再注意下get和post方法的区别
- GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中.
- GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.
- GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。
- GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码.
response消息也分为三个部分:状态行,header,body(header和body之间有个空行)
HTTP/version-number表示HTTP协议的版本号,status code叫做状态码,message是状态消息
状态码也就是上网站时经常看到的400,500等,主要用来告诉浏览器,服务器端的情况
HTTP/1.1中定义了5类状态码, 状态码由三位数字组成,第一个数字定义了响应的类别
1XX 提示信息 - 表示请求已被成功接收,继续处理
2XX 成功 - 表示请求已被成功接收,理解,接受
3XX 重定向 - 要完成请求必须进行更进一步的处理
4XX 客户端错误 - 请求有语法错误或请求无法实现
5XX 服务器端错误 - 服务器未能实现合法的请求
下面给个刚才访问百度成功后百度后台返回的http消息:
HTTP/1.1 302 Moved Temporarily
Date:Tue, 13 Oct 2015 09:24:14 GMT
Content-Type:text/html
Content-Length:215
Connection:Keep-Alive
Location:https://www.baidu.com/
Server:BWS/1.1
X-UA-Compatible:IE=Edge,chrome=1
Set-Cookie:BD_LAST_QID=12439085549690600252; path=/; Max-Age=1
<html>
<head><title>302Found</title></head>
<bodybgcolor="white">
<center><h1>302Found</h1></center>
<hr><center>pr-nginx_1-0-249_BRANCHBranch
Time: Wed Sep 23 14:17:25 CST 2015</center>
</body>
</html>
(绿色代表消息行,蓝色代表header,橙色代表body)
最后说一点,HTTP协议是面向连接的协议,所以传输层用的是TCP协议。从HTTP/1.1起,默认都开启了Keep-Alive,保持连接特性,简单地说,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。
引用网站:
易懂基础版:http://kb.cnblogs.com/page/130970/
深入了解版:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436.html
二.TCP和UDP
TCP和UDP都是传输层的协议,TCP是面向连接的可靠协议,UDP是无连接的不可靠协议
TCP之所以可靠的原因是两台主机通信之前会有一个“三次握手”的过程,成功后才会建立连接开始传输数据。(这个过程常被形容为打电话)
UDP则不确定是否连接成功,只管向目标主机发送数据,不在乎你是否收到。
下面是TCP三次握手的过程:
关于TCP,UDP,HTTP,IP协议之间的关系,看到过一个举例觉得很生动:
TCP和UDP使用IP协议从一个网络传送数据包到另一个网络。把IP想像成一种高速公路,它允许其它协议在上面行驶并找到到其它电脑的出口。TCP和UDP是高速公路上的“卡车”,它们携带的货物就是像HTTP,文件传输协议FTP这样的协议等。
来源:TCP,UDP,HTTP,SOCKET之间的差别
参考网站:TCP/IP详细学习笔记
- 浅谈HTTP,TCP,UDP
- TCP/UDP/SOCKET/HTTP浅谈
- 浅谈TCP/UDP、IP 、Socket、HTTP
- 浅谈网络编程技术(TCP、UDP、HTTP)
- TCP/UDP/HTTP
- TCP HTTP UDP 区别
- HTTP、TCP、UDP、Socket
- tcp udp http
- HTTP与TCP/UDP
- TCP、UDP和HTTP
- TCP,UDP,HTTP 协议
- TCP、UDP和HTTP
- tcp udp http
- TCP UDP HTTP
- TCP、UDP和HTTP
- TCP、UDP、HTTP
- TCP、UDP和HTTP
- TCP、UDP和HTTP
- 二、JavaScript基本数据结构
- python3中django无法展示数据库表内容的解决方法
- 整屏滚动
- 生成图形验证码
- 怎样做才是一个合格的程序员
- 浅谈HTTP,TCP,UDP
- ***5.33-当前日期与时间
- 关于动态在jar包中获取资源ID
- oracle12c安装时报错:[INS-30131] 执行安装程序验证所需的初始设置失败
- 【Android-011】【多线程下载】
- Larazus开发计算器
- 字符串转换为数值
- 冒泡排序算法 php
- 异常