1 关键字
网络通信协议
lwip
tftp
TCP/IP协议栈 == TCP/IP协议簇 == TCP/IP协议 == TCP/IP != TCP协议 != IP协议
2 TCP/IP协议和OSI协议之间的区别
开放系统互联(OSI)模型是由国际标准化组织(ISO)于1984年提出的一种标准七层参考模型;
TCP/IP参考模型是首先由ARPANET所使用的网络体系结构。这个体系结构在它的两个主要协议出现以后被称为TCP/IP参考模型(TCP/IP Reference Model),是四层参考模型。TCP/IP是Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,它不仅仅只有TCP协议和IP协议,它是一个TCP/IP协议簇;
ISO制定的OSI参考模型的虽然抽象力高、通用性好,但由于当时技术不成熟,实现起来过于庞大、复杂,反而招致了许多批评。与此对照,由技术人员自己开发的TCP/IP协议栈获得了更为广泛的应用。TCP/IP与OSI最大的不同在于OSI是一个理论上的网络通信模型,而TCP/IP则是实际运行的网络通信模型。如下图片盗于网络:
3 TCP/IP协议栈的传输层协议
传输层协议通过“IP地址+端口号”来区分同一主机上的不同服务,如http服务、FTP服务等。
3.1 常见问题
3.1.1 由Internet号分配机构分配的常见应用层协议的默认知名端口是否可以修改?
答案是,既然是默认就可以修改,但是有一些不能修改。见如下:
①知名端口即众所周知的端口号,范围从0~1023,这些端口号一般固定分配给一些服务。比如21端口分配给FTP(文件传输协议)服务,25端口分配给SMTP(简单邮件传输协议)服务,80端口分配给HTTP服务,135端口分配给RPC(远程过程调用)服务等。
②网络服务是可以使用其他端口号的,如果不是默认的端口号则应该在地址栏上指定端口号,方法是在地址后面加上冒号”:”(半角),再加上端口号。比如使用”8080”作为WWW服务的端口,则需要在地址栏里输入”“。
③但是有些系统协议使用固定的端口号,它是不能被改变的,比如139 端口专门用于NetBIOS与TCP/IP之间的通信,不能手动改变。
④客户端在访问服务器时,源端口一般都是动态分配的1024以上的端口。
4 TCP/IP协议栈的应用层协议
4.1 通俗理解
首先,应用层协议,就是通讯各方事先约定好一些规则要求,比如传输数据的格式,大小,各字符按的含义等。最简单的比如传二进制数据一般都采用以下序列:
数据块总长度
数据
其实,编程最简单的实现就是把约定好的结构体当成应用协议发送过去。
然而,应用层协议不仅仅是数据,它可以通过其数据块字段做可靠性控制(如用帧序号等)、流量控制等。
另外,不仅仅只有一种包类型,还有例如控制包、数据包等。
4.2 编程实现
TCP及以下层是由操作系统内核实现,是处理通信细节。而应用层程序是通过socket编程实现的,处理的是应用程序细节。
TCP/IP只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口。就像操作系统会提供标准的编程接口,比如Win32编程接口一样,TCP/IP也必须对外提供编程接口,这就是Socket编程接口。socket的出现只是可以更方便的使用TCP/IP协议栈而已,其对TCP/IP进行了抽象,形成了几个最基本的函数接口。比如create,listen,accept,connect,read和write等等。
4.3 常见问题
4.3.1 什么是Socket编程/Socket通信?
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,其实就是一组接口,即Socket接口。
Socket接口是”TCP/IP网络”(其实目前的网络都是TCP/IP网络了)的API,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,而接口实现由内核完成。
Socket编程/Socket通信是指应用程序通过调用系统提供的Socket API实现网络中不通主机的进程间通信。
4.3.2 不同的应用层协议如何定义Socket?
首先,解释下定义Socket时,Socket函数的三个参数:
domain:AF_INET、AF_INET6、AF_LOCAL(或称AF_UNIX)。由于Dos\Window中仅支持AF_INET,所以通常选AF_INET。
type:SOCK_STREAM、SOCK_DGRAM、SOCK_RAW、SOCK_PACKET、SOCK_SEQPACKET等。通常选基于tcp连接,或基于udp无连接,或基于原始网络协议存取。这也意味着,
用socket可以创建任何协议的连接,因为其它协议都是基于此的。
protocol:IPPROTO_TCP、IPPTOTO_UDP、IPPROTO_SCTP、IPPROTO_TIPC等。通常赋值0。
备注:上面的type和protocol并不是可以随意组合的,如SOCK_STREAM不可以跟IPPROTO_UDP组合。当protocol为0时,会自动选择type类型对应的默认协议。
4.3.3 tftp和udp的区别?
其实最简单的tftp,就是在用socket定义udp连接的基础上,增加了打开关闭文件的操作。
5 TCP/IP协议栈的应用层协议和传输层协议之间的关系
待补充......。
6 推荐书籍
《深入浅出linux工具与编程》
《深入浅出linux tcp/ip协议栈》
阅读(3186) | 评论(0) | 转发(0) |