一、 PPP移植
各项工作具体说明
向linux内核添加3G模块的驱动(USB转串口驱动)和PPP协议的支持,然后编译内核并下载到开发板。当然如果之前已经移植好内核,那么只需要增加几个选项就可以,然后在编译内核就可以了,这个文档默认内核已经移植过,所以只讲与USB转串口驱动和PPP协议支持的几个选项。
[lingyun@localhost linux-3.0]$ make menuconfig1、USB的驱动要选这几个:
DeviceDrivers---→
USBsupport---→
<*>USB SerialConverter support--→
[*]USBGeneric Serial Driver
<*>USBdriver for GSM and CDMA modems
2、到此3G模块驱动添加完成,下面进行ppp协议支持的添加(下面所示的几个选项必选):
DeviceDrivers--→
Network devicesupport---→
<*> PPP (point-to-point protocol) support
[*] PPP multilink support (EXPERIMENTAL)
<*> PPP support for async serial ports
<*> PPP support for sync tty ports
<*> PPP Deflate compression
<*> PPP BSD-Compress compression
完成了这些步骤以后就可以退出make menuconfig进行make编译内核了。然后再把生成的镜像文件下载到板子上重启开发板即可。然后就会发现在/dev/目录下生成ppp设备节点:~ >: ls -l dev/ppp
crw-rw---- 1 root root 108, 0 Mar 27 17:35 dev/ppp
二、 usb_modeswitch移植
下载usbmode库:
[lingyun@localhost fulinux]$ mkdir usbmode
[lingyun@localhost fulinux]$ cd usbmode/
[lingyun@localhost usbmode]$ wget http://pkgs.fedoraproject.org/repo/pkgs/libusb1/libusb-1.0.0.tar.bz2/df2447c23750ef2b4a314200feacc2ee/libusb-1.0.0.tar.bz2
[lingyun@localhost usbmode]$ wget http://jaist.dl.sourceforge.net/project/libusb/libusb-compat-0.1/libusb-compat-0.1.5/libusb-compat-0.1.5.tar.bz2
[lingyun@localhost usbmode]$wget http://pkgs.fedoraproject.org/repo/pkgs/usb_modeswitch/usb-modeswitch-1.2.4.tar.bz2/dbd4ce7966d7b4a5a0604a8280f7164d/usb-modeswitch-1.2.4.tar.bz2
[lingyun@localhost usbmode]$ wget http://www.draisberghof.de/usb_modeswitch/usb-modeswitch-data-20130607.tar.bz2
以上这些下载地址如果有失效的,搜索相应的文件下载,即可下载。
解压:
[lingyun@localhost usbmode]$ tar xjf libusb-1.0.0.tar.bz2
[lingyun@localhost usbmode]$ tar xjf libusb-compat-0.1.5.tar.bz2
[lingyun@localhost usbmode]$ tar xjf usb-modeswitch-1.2.6.tar.bz2
[lingyun@localhost usbmode]$ tar xjf usb-modeswitch-data-20130607.tar.bz2
编译libusb:
[lingyun@localhost usbmode]$ mkdir install
[lingyun@localhost usbmode]$ cd libusb-1.0.0
[lingyun@localhost libusb-1.0.0]$ ./configure --prefix=/home/lingyun/fulinux/usbmode/install/ --build=i686 --host=arm-linux --disable-shared --enable-static (注意有两--的前面有一个空格)
[lingyun@localhost libusb-1.0.0]$ make
[lingyun@localhost libusb-1.0.0]$ make install
[lingyun@localhost libusb-1.0.0]$ ls ../install/
include lib
[lingyun@localhost libusb-1.0.0]$
编译usb_modeswitch:
[lingyun@localhost usbmode]$ cd usb-modeswitch-1.2.6
[lingyun@localhost usb-modeswitch-1.2.6]$ ls
[lingyun@localhost usb-modeswitch-1.2.6]$ vim Makefile
CC ?=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc #addr fulinux
CFLAGS += -Wall -l ../install/include-static #add by fulinux
LIBS = -L ../install/lib/ -l usb -l usb-1.0-l pthread #add by fulinux
[lingyun@localhost libusb-1.0.0]$ cd ..
[lingyun@localhost usbmode]$ export PKG_CONFIG_PATH=/home/lingyun/fulinux/usbmode/install/lib/pkgconfig:$PKG_CONFIG_PATH
[lingyun@localhost usbmode]$ cd libusb-compat-0.1.5
[lingyun@localhost libusb-compat-0.1.5]$
[lingyun@localhost libusb-compat-0.1.5]$ ./configure --prefix=/home/lingyun/fulinux/usbmode/install/ --build=i686 --host=arm-linux
--disable-shared --enable-static
[lingyun@localhost libusb-compat-0.1.5]$ make
一、 PPP移植
各项工作具体说明
向linux内核添加3G模块的驱动(USB转串口驱动)和PPP协议的支持,然后编译内核并下载到开发板。当然如果之前已经移植好内核,那么只需要增加几个选项就可以,然后在编译内核就可以了,这个文档默认内核已经移植过,所以只讲与USB转串口驱动和PPP协议支持的几个选项。
[lingyun@localhost linux-3.0]$ make menuconfig1、USB的驱动要选这几个:
DeviceDrivers---→
USBsupport---→
<*>USB SerialConverter support--→
[*]USBGeneric Serial Driver
<*>USBdriver for GSM and CDMA modems
2、到此3G模块驱动添加完成,下面进行ppp协议支持的添加(下面所示的几个选项必选):
DeviceDrivers--→
Network devicesupport---→
<*> PPP (point-to-point protocol) support
[*] PPP multilink support (EXPERIMENTAL)
<*> PPP support for async serial ports
<*> PPP support for sync tty ports
<*> PPP Deflate compression
<*> PPP BSD-Compress compression
完成了这些步骤以后就可以退出make menuconfig进行make编译内核了。然后再把生成的镜像文件下载到板子上重启开发板即可。然后就会发现在/dev/目录下生成ppp设备节点:~ >: ls -l dev/ppp
crw-rw---- 1 root root 108, 0 Mar 27 17:35 dev/ppp
二、 usb_modeswitch移植
下载usbmode库:
[lingyun@localhost fulinux]$ mkdir usbmode
[lingyun@localhost fulinux]$ cd usbmode/
[lingyun@localhost usbmode]$ wget http://pkgs.fedoraproject.org/repo/pkgs/libusb1/libusb-1.0.0.tar.bz2/df2447c23750ef2b4a314200feacc2ee/libusb-1.0.0.tar.bz2
[lingyun@localhost usbmode]$ wget http://jaist.dl.sourceforge.net/project/libusb/libusb-compat-0.1/libusb-compat-0.1.5/libusb-compat-0.1.5.tar.bz2
[lingyun@localhost usbmode]$wget http://pkgs.fedoraproject.org/repo/pkgs/usb_modeswitch/usb-modeswitch-1.2.4.tar.bz2/dbd4ce7966d7b4a5a0604a8280f7164d/usb-modeswitch-1.2.4.tar.bz2
[lingyun@localhost usbmode]$ wget http://www.draisberghof.de/usb_modeswitch/usb-modeswitch-data-20130607.tar.bz2
以上这些下载地址如果有失效的,搜索相应的文件下载,即可下载。
解压:
[lingyun@localhost usbmode]$ tar xjf libusb-1.0.0.tar.bz2
[lingyun@localhost usbmode]$ tar xjf libusb-compat-0.1.5.tar.bz2
[lingyun@localhost usbmode]$ tar xjf usb-modeswitch-1.2.6.tar.bz2
[lingyun@localhost usbmode]$ tar xjf usb-modeswitch-data-20130607.tar.bz2
编译libusb:
[lingyun@localhost usbmode]$ mkdir install
[lingyun@localhost usbmode]$ cd libusb-1.0.0
[lingyun@localhost libusb-1.0.0]$ ./configure --prefix=/home/lingyun/fulinux/usbmode/install/ --build=i686 --host=arm-linux --disable-shared --enable-static (注意有两--的前面有一个空格)
[lingyun@localhost libusb-1.0.0]$ make
[lingyun@localhost libusb-1.0.0]$ make install
[lingyun@localhost libusb-1.0.0]$ ls ../install/
include lib
[lingyun@localhost libusb-1.0.0]$
编译usb_modeswitch:
[lingyun@localhost usbmode]$ cd usb-modeswitch-1.2.6
[lingyun@localhost usb-modeswitch-1.2.6]$ ls
[lingyun@localhost usb-modeswitch-1.2.6]$ vim Makefile
CC ?=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc #addr fulinux
CFLAGS += -Wall -l ../install/include-static #add by fulinux
LIBS = -L ../install/lib/ -l usb -l usb-1.0-l pthread #add by fulinux
[lingyun@localhost libusb-1.0.0]$ cd ..
[lingyun@localhost usbmode]$ export PKG_CONFIG_PATH=/home/lingyun/fulinux/usbmode/install/lib/pkgconfig:$PKG_CONFIG_PATH
[lingyun@localhost usbmode]$ cd libusb-compat-0.1.5
[lingyun@localhost libusb-compat-0.1.5]$
[lingyun@localhost libusb-compat-0.1.5]$ ./configure --prefix=/home/lingyun/fulinux/usbmode/install/ --build=i686 --host=arm-linux
--disable-shared --enable-static
[lingyun@localhost libusb-compat-0.1.5]$ make
大家都知道,传输层定义了两种协议,一种是TCP,另一种就是UDP。提到TCP,我们第一印象就是这是一种面向连接、可靠、不会丢包的传输层控制协议;而提到UDP,我们就会说非可靠连接、会丢包、但是速度快,可实时传输数据。这些特点我想每一位学网络的人都早已耳熟能详,即使没有接触过网络的人也早已而闻。但是具体的讲,这是什么原因造成的?TCP和UDP的区别这么大,在如今快速发展的互联网时代,他们又在哪些实际应用中分别发挥着自己的功能呢?
带着这些疑问,听小编细细道来。
“3次握手建立TCP连接,4次握手终止TCP连接”。是的,TCP和UDP最大的不同就在这里,当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP建立连接的过程是通过三次握手来完成的,首先发送端给接收端发送一个SYN请求,就相当于问对方:“我可以给你发送数据吗?”接收端收到这个请求后,向发送端回应一个SYN/ACK应答,就是说:“当然可以,我可以向你发送数据吗?”然后发送方收到此包后在向接收端回应ACK,发送端说:“可以啊。”完成3次握手后,TCP连接成功建立,双方就能相互发送数据了。而终止一个TCP连接需要4次握手,这是由TCP的半关闭状态造成的。由于发送端和接收端的连接都能独立的被终止,所以在这个过程中双方都需要发送一个FIN和ACK。
TCP提供超时重发、丢弃重复数据、检验数据、流量控制等功能,保证数据能从一端传到另一端。提到这些TCP的特有功能,其实在TCP的报头中完美的体现了出来。
图1 TCP 报头结构
TCP报头的总长最小为20字节,其中来源连接端口指定了发送端的端口,目的连接端口指定了接收端的端口,它们用来标识发送方和接收方的应用层。对于每个TCP连接的一端,都有一个相关的16位的无符号端口号分配给它们,这个端口号与它所在主机的IP地址构成一个48位的套接字,一对套接字在互联网中唯一标识一个TCP连接。序列号是用于标识每个报文段,使接收端可确认已收到指定报文段中的数据。当发送端用多个报文段发送一个报文时,即使这些报文到达目的主机的顺序不一样,序列号也可以使目的主机按顺序排列它们。确认号32位,目的主机返回确认号,使源主机知道某个或几个报文段已被接收。如果ACK控制位被设置为1,则该字段有效。确认号等于顺序接收到的最后一个报文段的序号加1,这也是目的主机希望下次接收的报文段的序号值。返回确认号后,计算机就认为此确认号之前的数据都已经接收到。如此,就实现了无乱序、无丢失、和无重复的可靠数据传输。标题长度占4位,指明了TCP报文头的长度,保留是为以后预留一个字段,标志符就是我们通常所说的标志位,当满足条件时,把对应的位置1。例如:当发送确认信号时,就在报文头中把ARK位置1.窗口指明了发送端下一段能发送数据的大小,避免主机分组发送得过快而使接收端来不及完全收下,避免了网络阻塞。TCP的校验和占16位,在传输是设置了双校验机制,也就是发送者在发送时需要把TCP的段头和数据包校验一次,同时接收者收到报文后也需要重新校验一次。如此一来,就保证了报文的完整性和正确性。紧急指针指明报文中包含紧急信息,只有当URG位置1时,紧急指针才有效。
相对而言,UDP的数据传输就简单多了,它不提供可靠性,只是把数据包往IP层上一扔,至于数据包能不能传送到目的地,会不会丢包,传送数据报的顺序是否正确,不好意思,这就不是UDP能够提供的了。由于UDP传输数据包前不需要建立连接,没有重发机制,所以UDP速度非常快。其实这些在UDP的报头中都体现了出来。
图2 UDP报头结构
UDP报头由4个部分组成,其中两个是可选的。各16bit的来源端口和目的端口用来标记发送和接受的应用进程。因为UDP不需要应答,所以来源端口是可选的,如果来源端口不用,那么置为零。在目的端口后面是长度固定的以字节为单位的长度域,用来指定UDP头部和UDP数据的总长度,长度最小值为8byte。报头剩下地16bit是用来对首部和数据部分一起做校验和(Checksum)的,这部分是可选的,但在实际应用中一般都使用这一功能。
显然,TCP和UDP都有一些自己的独特的地方,这就决定了TCP与UDP在不同的领域发光发热。这就要我们选择时多注意点了,下面是我的几点建议:
l 当数据传输的性能必须让位于数据传输的完整性、可控制性和可靠性时,TCP协议是当然的选择,如:发送邮件。
l 当强调传输性能而不是传输的完整性时,如:实时流多媒体(如因特网广播)、实时多媒体播放器和游戏、IP电话(VoIP)等等,UDP是最好的选择。在数据传输时间很短,以至于此前的连接过程成为主体的情况下,UDP也是一个好的选择,如:DNS交换。把SNMP建立在UDP上的部分原因是设计者认为当发生网络阻塞时,UDP较低的开销使其有更好的机会去传送管理数据。
TCP丰富的功能有时会导致不可预料的性能低下,但是我们相信不远的将来一定会出现功能多、性能高的TCP协议应用到我们的网络中。