每次看TCP/IP相关的书籍,第一章就看不下去了,很几个问题希望熟悉的帮解答下:
1.HTTP协议和TCP协议为什么不是在同一层呢?HTTP是表示层的东西,TCP是传输层的东西,那比如网页浏览器,它用的什么协议呢?用抓包工具抓到的HTTP,但根据书上讲的,传输的时候是用TCP或UDP中的一种对吧?这个概念不是很懂
2.一个网络应用程序,它应该没用到表示层的任何东西吧?那这时候表示层的作用是什么呢?其实,这个问题和第一个问题差不多。主要是对每层的作用不是很懂。
3.能不能以通俗、白话的方式讲讲七层每层的作用,拿浏览器或者一个普通的聊天程序举例。
4.tcp/ip和OSI七层模型的分层是不一样的,有什么区别吗?比如应用层、表示层、会话层合并成tcp/ip的应用层,以前三层的东西在这一层中完成?
5.谢谢!小白问题误笑!希望帮解答下,再次表示感谢!
1
wy315700 2015-07-03 21:30:36 +08:00 1
1 OSI 七层模型只是一个理论上的东西 并没有被实施
2 现在广泛使用的是TCP/IP协议,没有表现层,传输层上面就是应用层。 3 HTTP协议是包在TCP里的一个协议,你可以理解成一个瓶子里装了酒。 |
2
gamexg 2015-07-03 21:44:41 +08:00 via Android
可以理解为一层层的套信封,TCP信封里面是http信封,http信封里面才是内容。TCP信封外面是链路层信封。
每层都有自己的收件地址,发件地址。 |
3
hahasong 2015-07-03 21:47:47 +08:00
一说有7层,另一说有4层,这些都只是逻辑上的分层而已。其实你理解4层的就好了
7层:物理层,数据链接层,网络层,传输层,会话层,表示层,应用层 4层:物理层 网络层 传输层 应用层 高层包装了低层,相当于JAVA里面的流的包装类 1.ip协议是网络层,tcp是传输层协议。http是包装了tcp,是应用层的协议,应用层可以理解成软件自己定义的协议。而tcp只是网卡上认的协议,更底层一些。知道俄罗斯套娃不,外层的娃娃就代表高级的协议。最里边的表示低级的物理层协议。依次类推。当软件从应用层发送数据的时候,应用层的协议被编码成网络层的协议,网络层的协议再编码成物理层的协议,直到最后编码成网线里的二进制电流 发送出去。接收方接收的时候顺序相反,接收到二进制电流后,先解包成网络层协议,然后网络层协议被解码成应用层协议。最后软件在从应用层协议的返回里取回数据。 2.你当会,表,应都是应用层就可以了 3,4,5 tcp/ip协议这本书老厚了,又枯燥。我也是小白,反正这么理解,基本上就懂了 |
4
Biwood 2015-07-03 21:53:14 +08:00
出门左转维基百科: https://en.wikipedia.org/wiki/OSI_model
另外,HTTP 是应用层好吧。 不同的抓包工具抓缺的结果也不同啊,Filddler 就是抓 HTTP 的数据,Wireshark 可以抓传输层的数据。 |
5
vtexfan OP 谢谢楼上几位兄弟,你们都太棒了。不过你们说的都有点晦涩,我脑筋不太好,还是有点不太明白。
@hahasong 兄的解释,我就差那么一点点就能完全理解了。让我再仔细琢磨琢磨。 |
6
akira 2015-07-03 23:47:21 +08:00
HTTP是在TCP的上层,TCP告诉你传了一堆数据,HTTP则告诉你这堆数据是啥。所以你抓浏览器的包,发现是TCP协议完全没有任何冲突的地方。
|
7
lk09364 2015-07-03 23:53:59 +08:00
这个是 TCP 包:
而 HTTP 在上图的 Data 里面。 Image from http://liangjiabin.com/blog/2015/03/difference-between-tcp-vs-udp-protocol.html |
8
fzinfz 2015-07-03 23:56:29 +08:00
$ netstat -ltup
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 *:http *:* LISTEN - tcp 0 0 *:ssh *:* LISTEN - udp 0 0 *:ntp *:* - |
9
vtexfan OP 谢谢楼上三位!
@akira 兄,你这么说我好像明白了点什么,快要开窍了。那如果一个普通的网络应用程序,没用到HTTP之类的这种协议,就传输一个字符串"hello",那谁来告诉的这堆数据是啥?你明白我的意思吗? |
10
qw7692336 2015-07-04 04:15:34 +08:00 via Android
不用那么麻烦,你找个抓包工具,抓一下传输层的包(TCP包),就懂了。我就是在玩过抓包之后秒懂的。你开chrome的开发者选项,切换到network拦,对比跟抓包工具抓到的包对比一下。之后你可以试着用telnet去发送HTTP请求。这时你应该知道TCP和HTTP之间的关系了。
|
11
ryd994 2015-07-04 08:46:20 +08:00 via Android
严格来说,我们传输的数据,其实都是在网线上的电信号而已。然而,如果写个网页也要先从门电路写起的话估计程序员都要上吊了。7层模型是说网络上传输的数据可以在7个抽象层次上考虑。这样每一层都只要完成有限的职责即可,方便思考。比如Web程序员就不需要太多考虑TCP的事(当然优化的时候还是要的,然而不懂TCP,程序也能跑),比如写个网游客户端就不需要考虑ARP查询。
这 7层模型只是一种思考方式,方便交流而已。并非网络就一定有7层或者只有7层,全看个人怎么理解。实际的概念是很模糊的。 能明白浏览器、路由器、交换机、HUB其实是在合作完成同一个任务,但不是在做同样的事情,就可以了。 |
12
jasontse 2015-07-04 13:10:09 +08:00 via iPad
TCP 和 HTTP 并不冲突。和对方主机的 TCP 80 建立连接,上面传的东西是 HTTP。
你的抓包工具只是识别出里面是 HTTP 的内容,然后以更友好的方式给你看。 |
13
zeroday 2015-07-05 09:06:21 +08:00
HTTP 协议是 Web 工作的核心。
HTTP 是通过 Internet 进行接受和发送数据的协议。它是在 TCP 协议之上,一般采用 TCP 的80端口。它是一种请求-响应的协议,浏览器客户端发送请求,服务器接受到数据后产生响应。 在 HTTP 中,客户端通过一个连接和发送请求作为一个事务。服务器不能主动连接客户端,也不能给服务器发送一个回调连接。客户端与服务器都可以中断连接。 HTTP 协议是一种无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系的。对于 HTTP 服务器,是不能识别两次请求是来自同一个客户端的。为了解决这一问题,Web 程序引入了 Cookie 来维护连接的可持续。 |
14
vtexfan OP 谢谢各位。前面的弄懂了,又产生了很多新问题,目前在啃书中。
|