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


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/

深入了解版: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详细学习笔记

0 0
原创粉丝点击