您的位置:首页 > 理论基础 > 计算机网络

浅谈HTTP,TCP,UDP

2015-10-14 15:48 393 查看
最近在学抓包,同时把网络协议补了补,今天总结下吧。

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 / 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上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码.

2.response消息

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/

深入了解版:/content/6098544.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详细学习笔记
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: