首页 > 技术文章 > tcp+ip+http+以太网协议+socket++(概述)

SimpleISP 2016-03-15 17:20 原文

这几个东西一点都不会混乱,因为都不是一层面上的东东,现在想想早期我之所以觉着有些搞不懂是因为对协议所处的抽象层不清楚,可见知识应该是从底层扎实走的。

 
首先协议一点都不高大上,协议就是双方达成的必须共同遵守的规范,仅此而已。
 
互联网之间的数据传输都是在以太网上的,数据在放在以太网之前需要做一些加工,假设我们要发一个http请求头,http请求头是应用层面上的,我们自己根据http协议的规范拼写了一个http的request,我们拼写完毕之后需要把这个放在以太网上才能发送给另一台计算机,然而我们是不能直接讲着东西丢到以太网的,为什么?
 
因为数据要给谁用必须知道目标应用的端口,所以我们还需要一个协议封装一下这个数据为他加上端口信息,于是udp和tcp就出来了,tcp只是加强版的udp目的都是为数据加个端口而已,但是tcp在信息传送的可靠性上做了很多工作,比如在准备发送阶段他会跟目标主机三次握手,说是握手说白了就是我传给你数据你再传回来,以保证咱都通了,然后再去传送应用层希望传输的数据,每次传输完了都会等待对方的应答,表示已经成功发过去了,否则需要再次重发一下,结束也是一个相互交流的过程,虽然实现了可靠但是效率降低了,tcp协议为数据加上端口之后数据就可以传输了么?
 
还是不不行光有端口没有ip数据到了以太网上也是无处可去的,于是ip协议又出来了,ip协议对这个数据再处理一下,加上ip的信息就可以丢到以太网了,那么这下总可以传输了吧?还是不行,以太网数据包的最大长度是1500字节,如果ip数据包超过了这个大小我们需要将其切分开,再加上以太网标头,方便接收方数据的重组,然后这个数据就可以出发了。
 
最后说一下socket吧,socket是对tcp或是udp的一个实现而已,也就是说我们有了一个协议,总要一个程序去实现这个协议才能在编程中使用吧,socket就是这么一个程序。

推荐阅读