前言:本人软件工程毕业,读大学时认为软件工程的学生只要会编程就行,其余的学科都是次要的,这直接导致自己的计算机网络学的惨不忍睹,第二份工作,也就是现在的工作做app接口开发,经常与硬件打交道,看到公司产品的通讯协议之类的,自己就懵逼了,趁最近没事,恶补下计算机网络的知识。
1 TCP/IP四层协议模型与OSI七层协议模型
图1-1 TCP/IP参考模型
2 TCP/IP参考模型的四个层:应用层,传输层,网络层,链路层
图2-1 TCP/IP参考模型-对于协议
2.1 网路层
2.1.1 IP报文格式
IP协议是TCP/IP协议族中最为核心的协议。它提供不可靠、无连接的服务,也即依赖其他层的协议进行差错控制。在局域网环境,IP协议往往被封装在以太网帧中传送。而所有的TCP、UDP、ICMP、IGMP数据都被封装在IP数据报中传送。
图2-2 IP协议报文格式
其中:
1 ~ 版本(Version)字段:占4比特。用来表明IP协议实现的版本号,当前一般为IPv4,即0100。
2 ~ 报头长度:
3 ~ 服务类型:
4 ~ 总长度字段:占16位长度。指明整个数据报的长度(以字节为单位)。最大长度为65535字节。
由图2-2可知,普通的IP首部长为20(4 * 5)字节,除非含有选项字段。
3 数据传输
应用层可以认为是各种各样的应用程序,但时我们经常也会听到如FTP,Telnet,HTTP协议等等,它们被称为协议是指它们对交换的数据格式顺序做了规定,起到了协议的作用.链路层,网络层和传输层有操作系统在内核中实现,操作系统提供了API让运行在这个操作系统上的应用层的应用程序来调用.对于JAVA提供的JDK来讲,我们通常只能操作到传输层,JAVA也可以通过一个开源的项目Jpcap来实现对IP层和链路层的访问.而对于在Unix/Linux下通过C编程,可以通过函数调用操作到IP层和链路层.一个主机上的应用程序要和另一个主机上的应用程序通信,通常过程是这样的:在发送端,处于应用层的应用程序提供要发送的数据,调用操作系统的API,数据被加上如下图所示的头信息,以TCP为例,在传输层加上了TCP头形成TCP段,在IP层再加上了IP头形成了IP数据报,在链路层再加上了以太网首尾形成了以太网帧.操作系统调用网卡的驱动将以太网帧发到网络上
图3-1 数据传输图解