问:什么是网络协议?

答:网络协议是一种数据约定的方案。比如早期的电报,电报电缆是没法传输文字的,必须经过转换成滴答声后才能传输,发电报和收电报的人手上都会有一套约定好的编码(加密解密)小本本。小本本上记录的约定就是协议。再比如说,发送短信101到10086可以查话费,102可以查流量。这是10086给定的规则,当然这个不是必须的,规则是可以改的,改成“HF”是查话费,“LL”是查流量,这样也行。总之,协议是一套数据传送的约定,是大家共同遵守的事实标准。当然,你自己搞一套编码方案,实现数据传输也是可以的。网络传输分成了不同的层,每一层有每一层的约定。ip层负责按照ip能传送到机器;mac层负责按照mac能传送到机器;tcp层负责按照多机器应用间的数据传输;应用层对具体语义层的数据定义规范;物理层负责具体数据传输的通道,比如物流,你是走海陆空哪条线路。


英文protocol的翻译:

应用程序员角度的网络协议_java


2问:什么是TCP/IP协议?

答:这是目前互联网共同遵守的一套协议,并不只是指代tcp和ip两个协议。网络数据传输时,数据不是作为一个整体传输过去的。数据按照切片的形式传输,每一个切片叫做报文。这就类似于,你写一封很长的信,需要很多张信纸一样。网络传输时,是一张“信纸”发一封信的方式进行传输的。我们知道你要把信发给对方,需要在信封上填上“邮编”“地址”“姓名”信息。网络传输时,也需要类似的信封信息,这就对应于,IP、MAC和端口信息。如下图。

应用程序员角度的网络协议_java_02

每个“应用数据”(报文、信纸)都要套上具体tcp信息(端口)、ip信息(邮编)、mac信息等。邮编和ip是很类似的,我们从北京发往深圳的一封邮件,可能是需要通过在武汉进行中转的,ip层负责城际之间的转发。mac地址和家庭门牌号一样,mac地址能具体定位到主机。端口号类似于人名一样,主机内有很多应用,具体是哪个应用(端口,家里的哪个人)需要收这份数据。


下图是两台主机之间的数据通信示意图。

应用程序员角度的网络协议_java_03

3问:为什么需要ip和mac两套地址?

  • mac地址是网卡出厂便有的,一般来看是很乱的。ip地址则进行了基本按地理位置统一编制。就类似于门牌号和邮编的关系。

  • 又有人说了,只用ip不就行了,但网络传输,需要经过多次转发(跳)才能到目的地。这个过程,需要通过mac地址记录下一跳的位置。

  • 此外,两套地址加大了设计的灵活性。用户换了地理位置,通常ip就换了,但mac地址不能换。生活中,除了邮编外,手机号也是类似的方法。手机上有一个类似mac的IMEI号(国际移动设备识别码),手机号就类似于ip,手机号能换,IMEI通常是不能换的。


4问:linux怎么实现tcp/ip?

答:linux把这套协议实现在内核中,对外部暴露socket套接字接口,网络应用需要通过socket进行通信。套接字算文件IO的一个特例,如下图,对于程序员,只用知道ip加端口绑定到一个app上,然后进行通信即可。然后具体的网络应用,了解具体的应用层协议。

应用程序员角度的网络协议_java_04