linux收发报文命令 linux发送udp报文

如何让linux系统发送dhcp release报文是redhat?在/etc/sysconfig/network-scripts/ifcfg-eth0加入
DHCPRELEASE=yes
当运行ifdown eth0的时候就会发出dhcprelase报文,看/etc/sysconfig/network-scripts/ifdown-eth脚本中实际上是调用dhclient命令,用下面这个命令应该也可以 , 试试看吧 。
/sbin/dhclient -r eth0
linuxtelnet如何发送xml报文linuxtelnet发送xml报文方式如下linux收发报文命令:
1、在命令行下输入telnet172.18.1.17980 。
2、然后输入如下linux收发报文命令的报文头linux收发报文命令,直接回车发送即可 。
Linux网络协议栈7--ipsec收发包流程流程路径:ip_rcv() -- ip_rcv_finish() -- ip_local_deliver() --ip_local_deliver_finish()
解封侧一定是ip报文的目的端,ip_rcv_finish中查到的路由肯定是本机路由(RTCF_LOCAL) , 调用 ip_local_deliver 处理 。
下面是贴的网上的一张图片 。
ip_local_deliver_finish中 根据上次协议类型,调用对应的处理函数 。inet_protos 中挂载了各类协议的操作集,对于AH或者ESP来说,是xfrm4_rcv,对于ipsec nat-t情况下 , 是udp协议的处理函数udp_rcv,内部才是封装的ipsec报文(AH或者ESP) 。
xfrm4_rcv -- xfrm4_rcv_spi -- xfrm4_rcv_encap -- xfrm_input
最终调用 xfrm_input 做收包解封装流程 。
1、创建SKB的安全路径;
2、解析报文,获取daddr、spi , 加上协议类型(esp、ah等),就可以查询到SA了,这些是SA的key , 下面列出了一组linux ipsec的state(sa)和policy , 方便一眼就能看到关键信息;
3、调用SA对应协议类型的input函数,解包,并返回更上层的协议类型,type可为esp,ah,ipcomp等 。对应的处理函数esp_input、ah_input等;
4、解码完成后,再根据ipsec的模式做解封处理 , 常用的有隧道模式和传输模式 。对应xfrm4_mode_tunnel_input 和 xfrm4_transport_inout,处理都比较简单,隧道模式去掉外层头,传输模式只是设置一些skb的数据 。
5、协议类型可以多层封装 , 如ESP AH,所以需要再次解析内存协议,如果还是AH、ESP、COMP,则解析新的spi,返回2,查询新的SA处理报文 。
6、经过上面流程处理 , 漏出了用户数据报文(IP报文) , 根据ipsec模式:
流程路径如下图 , 这里以转发流程为例 , 本机发送的包主要流程类似 。
转发流程:
ip_forward 函数中调用xfrm4_route_forward , 这个函数:
1、解析用户报文,查找对应的Ipsec policy(__xfrm_policy_lookup);
2、再根据policy的模版tmpl查找对应最优的SA(xfrm_tmpl_resolve),模版的内容以及和SA的对应关系见上面贴出的ip xfrm命令显示;
3、最后根据SA生成安全路由,挂载再skb的dst上; 一条用户流可以声明多个安全策略(policy),所以会对应多个SA,每个SA处理会生成一个安全路由项struct dst_entry结构(xfrm_resolve_and_create_bundle),这些安全路由项通过 child 指针链接为一个链表 , 其成员 output挂载了不同安全协议的处理函数,这样就可以对数据包进行连续的处理 , 比如先压缩,再ESP封装,再AH封装 。
安全路由链的最后一个路由项一定是普通IP路由项,因为最终报文都得走普通路由转发出去,如果是隧道模式,在tunnel output封装完完成ip头后还会再查一次路由挂载到安全路由链的最后一个 。
注: SA安全联盟是IPsec的基?。?也是IPsec的本质 。SA是通信对等体间对某些要素的约定,例如使用哪种协议、协议的操作模式、加密算法、特定流中保护数据的共享密钥以及SA的生存周期等 。
然后,经过FORWARD点后 , 调用ip_forward_finish()--dst_output , 最终调用skb_dst(skb)-output(skb),此时挂载的xfrm4_output
本机发送流程简单记录一下,和转发流程殊途同归:
查询安全路由: ip_queue_xmit -- ip_route_output_flow -- __xfrm_lookup
封装发送:ip_queue_xmit -- ip_local_out -- dst_output -- xfrm4_output
注:
1). 无论转发还是本地发送,在查询安全路由之前都会查一次普通路由,如果查不到,报文丢弃,但这条路由不一定需要指向真实的下一跳的出接口 , 只要能匹配到报文DIP即可,如配置一跳其它接口的defualt 。
2). strongswan是一款用的比较多的ipsec开源软件,协商完成后可以看到其创建了220 table , 经常有人问里面的路由有啥用、为什么有时有有时无 。这里做个测试记录: 1、220中貌似只有在tunnel模式且感兴趣流是本机发起(本机配置感兴趣流IP地址)的时候才会配置感兴趣流相关的路由,路由指定了source;2、不配置也没有关系,如1)中所说,只要存在感兴趣流的路由即可 , 只不过ping的时候需要指定source,否者可能匹配不到感兴趣流 。所以感觉220这个表一是为了保证
ipsec封装发送流程:
xfrm4_output--xfrm4_output_finish--xfrm_output--xfrm_output2--xfrm_output_resume--xfrm_output_one
xfrm4_output 函数先过POSTROUTING点 , 在封装之前可以先做SNAT 。后面则调用xfrm_output_resume--xfrm_output_one做IPSEC封装最终走普通路由走IP发送 。
贴一些网上的几张数据结构图
1、安全路由
2、策略相关协议处理结构
3、状态相关协议处理结构
linux下怎么发送syslog协议的报文告警可以用logger命令发送日志信息到本地的/var/log/message,小设备 可以编译个rsyslog上去 这样发日志比较好弄一些 。系统调用man 2 syslog库函数看看man 3 syslog
linux哪一个指令可以1.split 命令
split命令可以将一个大文件分割多个小文件linux收发报文命令 , 有时需要将文件分割成更小linux收发报文命令的片段linux收发报文命令 , 比如为提高可读性,生成日志等
选项
-blinux收发报文命令:值为每一输出档案linux收发报文命令的大?。ノ晃?byte 。
-C:每一输出档中,单行的最大 byte 数 。
-d:使用数字作为后缀 。
-l:值为每一输出档的列数大小 。
实例
生成一个大小为100kb的测试文件:
[root@localhost split]# dd if=/dev/zero bs=100k count=1 of=date.file
1 0 records
in 1 0 records out
102400 bytes (102 kB) copied, 0.00043 seconds, 238 MB/s
使用split命令将上面创建的date.file文件分割大小为10KB的小文件:
[root@localhost split]# split -b 10k date.file
[root@localhost split]# ls
date.file xaa xab xac xad xae xaf xag xah xai xaj
文件被分割多个带有字母的后缀文件 , 如果想用数字后缀可使用 -d参数,同时使用-a length来指定后缀的长度:
[root@localhost split]# split -b 10k date.file -d -a 3
[root@localhost split]# ls
date.file x000 x001 x002 x003 x004 x005 x006 x007 x008 x009
为分割后的文件指定前缀:
[root@localhost split]# split -b 10k date.file -d -a 3 split_file
[root@localhost split]# ls
date.file split_file000 split_file001 split_file002 split_file003 split_file004 split_file005 split_file006 split_file007 split_file008 split_file009
使用-l选项根据文件的行数分割文件,例如把文件分割成每个包含10行的小文件:
split -l 10 date.file
2.chkconfig命令
chkconfig命令检查、设置系统的各种服务 。这是Red Hat公司遵循GPL规则所开发的程序,它可查询操作系统在每一个执行等级中会执行哪些系统服务,其中包括各类常驻服务 。谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接 。
语法
chkconfig(选项)
选项
--add:增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据;
--del:删除所指定的系统服务,不再由chkconfig指令管理,并同时在系统启动的叙述文件内删除相关数据;
--level等级代号:指定读系统服务要在哪一个执行等级中开启或关毕
等级代号列表:
复制代码
等级0表示:表示关机
等级1表示:单用户模式
等级2表示:无网络连接的多用户命令行模式
等级3表示:有网络连接的多用户命令行模式
等级4表示:不可用
等级5表示:带图形界面的多用户模式
等级6表示:重新启动
复制代码
实例
复制代码
chkconfig --list #列出所有的系统服务 。
chkconfig --add httpd #增加httpd服务 。
chkconfig --del httpd #删除httpd服务 。
chkconfig --level httpd 2345 on #设置httpd在运行级别为2、3、4、5的情况下都是on(开启)的状态 。
chkconfig --list #列出系统所有的服务启动情况 。
chkconfig --list mysqld #列出mysqld服务设置情况 。
chkconfig --level 35 mysqld on #设定mysqld在等级3和5为开机运行服务,--level 35表示操作只在等级3和5执行,on表示启动 , off表示关闭 。
chkconfig mysqld on #设定mysqld在各等级为on,“各等级”包括2、3、4、5等级 。
复制代码
需要说明的是,level选项可以指定要查看的运行级而不一定是当前运行级 。对于每个运行级,只能有一个启动脚本或者停止脚本 。当切换运行级时,init不会重新启动已经启动的服务 , 也不会再次去停止已经停止的服务
如何增加一个服务:
1.服务脚本必须存放在/etc/ini.d/目录下;
2.chkconfig --add servicename在chkconfig工具服务列表中增加此服务,此时服务会被在/etc/rc.d/rcN.d中赋予K/S入口了;
3.chkconfig --level 35 mysqld on修改服务的默认启动等级
3.ip命令
ip命令用来显示或操纵Linux主机的路由、网络设备、策略路由和隧道,是Linux下较新的功能强大的网络配置工具 。
语法
ip(选项)(参数)
选项
复制代码
-V:显示指令版本信息;
-s:输出更详细的信息;
-f:强制使用指定的协议族;
-4:指定使用的网络层协议是IPv4协议;
-6:指定使用的网络层协议是IPv6协议;
-0:输出信息每条记录输出一行,即使内容较多也不换行显示;
-r:显示主机时 , 不使用IP地址,而使用主机的域名 。
复制代码
参数
网络对象:指定要管理的网络对象;
具体操作:对指定的网络对象完成具体操作;
实例
用ip命令显示网络设备的运行状态:
复制代码
[root@bogon ~]# ip link show
1: lo: LOOPBACK,UP,LOWER_UP mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:7c:58:21 brd ff:ff:ff:ff:ff:ff
3: pan0: BROADCAST,MULTICAST mtu 1500 qdisc noop state DOWN
link/ether 52:a2:e3:d1:4e:77 brd ff:ff:ff:ff:ff:ff
复制代码
显示更加详细的设备信息:
复制代码
[root@bogon ~]# ip -s link show
1: lo: LOOPBACK,UP,LOWER_UP mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
RX: bytespacketserrorsdropped overrun mcast
960160000
TX: bytespacketserrorsdropped carrier collsns
960160000
2: eth0: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:7c:58:21 brd ff:ff:ff:ff:ff:ff
RX: bytespacketserrorsdropped overrun mcast
6582303169760000
TX: bytespacketserrorsdropped carrier collsns
2688612122610000
3: pan0: BROADCAST,MULTICAST mtu 1500 qdisc noop state DOWN
link/ether 52:a2:e3:d1:4e:77 brd ff:ff:ff:ff:ff:ff
RX: bytespacketserrorsdropped overrun mcast
000000
TX: bytespacketserrorsdropped carrier collsns
000000
复制代码
显示核心路由表:
[root@bogon ~]# ip route list
192.168.74.0/24 dev eth0proto kernelscope linksrc 192.168.74.131metric 1
default via 192.168.74.2 dev eth0proto static
显示邻居表:
[root@bogon ~]# ip neigh list
192.168.74.1 dev eth0 lladdr 00:50:56:c0:00:08 REACHABLE
192.168.74.2 dev eth0 lladdr 00:50:56:f4:26:2a STALE
192.168.74.254 dev eth0 lladdr 00:50:56:f6:c5:df STALE
4.nmap命令
是一款开放源代码的网络探测和安全审核工具,它的设计目标是快速地扫描大型网络 。
语法
nmap(选项)(参数)
选项
复制代码
-O:激活操作探测;
-P0:值进行扫描,不ping主机;
-PT:是同TCP的ping;
-sV:探测服务版本信息;
-sP:ping扫描,仅发现目标主机是否存活;
-ps:发送同步(SYN)报文;
-PU:发送udp ping;
-PE:强制执行直接的ICMPping;
-PB:默认模式,可以使用ICMPping和TCPping;
-6:使用IPv6地址;
-v:得到更多选项信息;
-d:增加调试信息地输出;
-oN:以人们可阅读的格式输出;
-oX:以xml格式向指定文件输出信息;
-oM:以机器可阅读的格式输出;
-A:使用所有高级扫描选项;
--resume:继续上次执行完的扫描;
-P:指定要扫描的端口,可以是一个单独的端口 , 用逗号隔开多个端口 , 使用“-”表示端口范围;
-e:在多网络接口Linux系统中 , 指定扫描使用的网络接口;
-g:将指定的端口作为源端口进行扫描;
--ttl:指定发送的扫描报文的生存期;
--packet-trace:显示扫描过程中收发报文统计;
--scanflags:设置在扫描报文中的TCP标志 。
复制代码
参数
ip地址:指定待扫描报文中的TCP地址 。
实例
安装nmap:
yum install nmap
使用nmap扫描的开放端口:
复制代码
[root@bogon ~]# nmap
Starting Nmap 5.51 () at 2016-04-23 00:18 PDT
Nmap scan report for(61.135.169.121)
Host is up (0.0081s latency).
【linux收发报文命令 linux发送udp报文】Other addresses for(not scanned): 61.135.169.125
Not shown: 998 filtered ports
PORTSTATE SERVICE
80/tcpopenhttp
443/tcp openhttps
Nmap done: 1 IP address (1 host up) scanned in 4.77 seconds
复制代码
5.lsof命令
lsof命令用于查看你进程开打的文件,打开文件的进程 , 进程打开的端口(TCP、UDP) 。找回/恢复删除的文件 。是十分方便的系统监视工具,因为lsof命令需要访问核心内存和各种文件,所以需要root用户执行 。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件 。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口 。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息 , 因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的 。
语法
lsof(选项)
选项
复制代码
-a:列出打开文件存在的进程;
-c进程名:列出指定进程所打开的文件;
-g:列出GID号进程详情;
-d文件号:列出占用该文件号的进程;
d目录:列出目录下被打开的文件;
D目录:递归列出目录下被打开的文件;
-n目录:列出使用NFS的文件;
-i条件:列出符合条件的进程 。(4、6、协议、:端口、 @ip )
-p进程号:列出指定进程号所打开的文件;
-u:列出UID号进程详情;
-h:显示帮助信息;
-v:显示版本信息 。
复制代码
实例
复制代码
[root@bogon ~]# lsof | head
COMMANDPIDUSERFDTYPEDEVICESIZE/OFFNODE NAME
init1rootcwdDIR8,240962 /
init1rootrtdDIR8,240962 /
init1roottxtREG8,2150352781872 /sbin/init
init1rootmemREG8,265928912175 /lib64/libnss_files-2.12.so
init1rootmemREG8,21926800921891 /lib64/libc-2.12.so
init1rootmemREG8,293320921921 /lib64/libgcc_s-4.4.7-20120601.so.1
init1rootmemREG8,247064921894 /lib64/librt-2.12.so
init1rootmemREG8,2145896921893 /lib64/libpthread-2.12.so
init1rootmemREG8,2268232921895 /lib64/libdbus-1.so.3.4.0
复制代码
lsof输出各列信息的意义如下:
复制代码
COMMAND:进程的名称
PID:进程标识符
USER:进程所有者
FD:文件描述符,应用程序通过文件描述符识别该文件 。
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称
复制代码
列出IPV4:
复制代码
[root@bogon ~]# lsof -i 4
COMMANDPID USERFDTYPE DEVICE SIZE/OFF NODE NAME
cupsd1655 root7uIPv4108590t0TCP localhost:ipp (LISTEN)
cupsd1655 root9uIPv4108620t0UDP *:ipp
sshd1794 root3uIPv4113710t0TCP *:ssh (LISTEN)
master1922 root12uIPv4117410t0TCP localhost:smtp (LISTEN)
clock-app 2407 root21uIPv4846770t0TCP localhost:47822-a72-246-188-18.deploy.akamaitechnologies.com:http (CLOSE_WAIT)
dhclient4407 root6uIPv4645410t0UDP *:bootpc
sshd5037 root3uIPv4798910t0TCP localhost:ssh-localhost:58254 (ESTABLISHED)
复制代码
6.route命令
route命令用来显示并设置Linux内核中的网络路由表,route命令设置的路由主要是静态路由 。要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现 。在Linux系统中设置路由通常是为了解决以下问题:该Linux系统在一个局域网中,局域网中有一个网关,能够让机器访问Internet , 那么就需要将这台机器的ip地址设置为Linux机器的默认路由 。要注意的是,直接在命令行下执行route命令来添加路由,不会永久保存,当网卡重启或者机器重启之后,该路由就失效了;可以在/etc/rc.local中添加route命令来保证该路由设置永久有效 。
语法
route(选项)(参数)
选项
复制代码
-A:设置地址类型;
-C:打印将Linux核心的路由缓存;
-v:详细信息模式;
-n:不执行DNS反向查找,直接显示数字形式的IP地址;
-e:netstat格式显示路由表;
-net:到一个网络的路由表;
-host:到一个主机的路由表 。
复制代码
参数
复制代码
Add:增加指定的路由记录;
Del:删除指定的路由记录;
Target:目的网络或目的主机;
gw:设置默认网关;
mss:设置TCP的最大区块长度(MSS),单位MB;
window:指定通过路由表的TCP连接的TCP窗口大?。?
dev:路由记录所表示的网络接口 。
复制代码
实例
显示当前路由:
复制代码
[root@bogon ~]# route
Kernel IP routing table
DestinationGatewayGenmaskFlags Metric RefUse Iface
192.168.74.0*255.255.255.0U100 eth0
defaultlocalhost0.0.0.0UG000 eth0
[root@bogon ~]# route -n
Kernel IP routing table
DestinationGatewayGenmaskFlags Metric RefUse Iface
192.168.74.00.0.0.0255.255.255.0U100 eth0
0.0.0.0192.168.74.20.0.0.0UG000 eth0
复制代码
其中Flags为路由标志,标记当前网络节点的状态,Flags标志说明:
复制代码
U Up表示此路由当前为启动状态 。
H Host,表示此网关为一主机 。
G Gateway,表示此网关为一路由器 。
R Reinstate Route,使用动态路由重新初始化的路由 。
D Dynamically,此路由是动态性地写入 。
M Modified,此路由是由路由守护程序或导向器动态修改 。
! 表示此路由当前为关闭状态 。
复制代码
添加网关/设置网关:
[root@bogon ~]# route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0#增加一条到达244.0.0.0的路由 。
屏蔽一条路由:
route add -net 224.0.0.0 netmask 240.0.0.0reject#增加一条屏蔽的路由,目的地址为224.x.x.x将被拒绝 。
删除路由记录:
route del -net 224.0.0.0 netmask 240.0.0.0
route del -net 224.0.0.0 netmask 240.0.0.0 reject
删除和添加设置默认网关:
route del default gw 192.168.120.240
route add default gw 192.168.120.240
linux服务器接收发送报文它使用状态的“关联”(协会),两对SCTP用户协议之间的信息交换条款的定义 。SCTP也是一个面向连接的,但在概念上,SCTP“关联”更广泛的TCP连接相比,只有一个TCP连接的源地址和目的地址,SCTP提供了另一种方式为每个SCTP端点的运输提供了一组地址等端点传输地址= IP地址 端口号 。
继承的TCP功能的基础上,SCTP提供了一些额外的功能:
1有序传输中的用户数据的多个“流”(流)
“流”是一系列的TCP中指的字节 , 而在SCTP是指某个系列的用户消息被发送到上层协议,这些消息的顺序与在流之内的其他消息 。当建立关联 , SCTP的用户的数据流的数目,可被提供给相关联的载体 。此号码被商定的流的??数目与源端的用户相关联的消息 。SCTP为每个邮件中的链接发送给同行的流分配的序列号 。在接收端,SCTP,以确保在一个给定的消息流的顺序被发送 。另一方面,当工作流正在等待的下一个非顺序的用户消息的其他数据流的发送时,将继续下去 。
2根据所发现的路径MTU(最大传输单元)的大小的用户数据切片
为了确保一致的SCTP报文发送到较低的路径MTU,SCTP用户消息分得一杯羹 。传递给上部SCTP用户在接收端,切片重组 。
3选择性确认(SACK)和拥塞控制
选择性确认数据包丢失,TCP序列号被返回给发送者已经成功地接收到的数据字节的序列号(不包括根据确认的字节数)的认可,并在SCTP反馈给发件人丢失,并要求序列号的消息重发 。
SCTP使用的TCP拥塞控制技术,包括慢启动,拥塞避免和快速重传 。因此 , 当一个共存和TCP应用程序时,SCTP的应用程序可以接收部分SCTP的网络资源 。
4块(块)结合 。
选择性地绑定到??SCTP包,即多个用户消息的消息发送到一个或多个数据结构的SCTP - “块”,SCTP储备应用程序消息传递框架边界 。不同类型的块可以绑定到一个SCTP报文,但任何一个数据块之前,必须放在控制块 。
5路径管理
SCTP路径管理功能主要是负责为目的地的运输提供了一个选择的目标地址的传输地址的远程地址,它是基于两个方面:SCTP用户的说明和合格的目的地 。当其他流量控制不能提供可达性信息 , 定期扫描路径管理功能链接到SCTP报告在远程传输地址发生变化的可达性 。SCTP路径管理功能模块还负责建立链接 , 该报告的末端的本地地址,传输地址告诉SCTP用户的远程回报 。
6,支持多归位
当SCTP传输的数据包的目的IP地址,如果IP地址是不可达的,SCTP消息重新路由到备用的IP地址 。因此 , 在相关联,即使在两端的 , 可以容忍网络级别的错误的一端 。
7对拒绝服务攻击(DoS)
DoS攻击的方法有很多种 , 最基本的DoS攻击就是利用合理的服务请求来占用过多的资源,从而使合法用户无法得到服务的响应 。SYN洪水攻击是一种拒绝服务攻击实例,是最好的方式了黑客攻击 。针对SYN Flooding攻击的目标主机上,SCTP关联的初始化阶段 , 实施以“Cookie”的安全机制 。
8支持多种传输模式
严格有序转移(如TCP)的有序转移(如每流)和无序传输(如UDP)的一部分 。
2 SCTP报文结构
SCTP分组结构的数据分组,第一部分可以遵循由可变长度的数据块中的一个或多个 。块类型 - 长度 - 值(TLV)格式 。源端口,目的端口,校验的意义是与TCP类似的意义 。确认标签保存价值的交流,第一次在SCTP握手初始标签 。如果任何SCTP报文不包括联想这样的标签,当到达的时间将是在接收端丢弃 。
包含的块类型,标记的转让处理,在每个块中的块长度 , TLV 。不同的块类型 , 可用于发送控制信息或数据 。
发送序列号(TSN)和流序列号(SSN)是两个不同的序列号,TSN,以确保可靠性整个关联的SSN保证整个流的有序性,因此,在发送的数据的可靠性订货区分开来 。
3 SCTP数据传输
4.1 SCTP四次握手的原则,抵制SYN洪水攻击
SCTP关联定义为:主机A的IP地址][主机的端口][IP地址的主机B][B主机端口 。因此,相应的组的每个端部中的IP地址的任何一个可以是标记相关的,通过四向握手,作为相应的源/目的地地址和结束SCTP主机交换通信状态 。
SYN洪水利用所固有的脆弱性,TCP / IP,TCP三次握手面向连接的SYN洪水的存在基础 。SYN Flooding攻击原理是:大量的恶意攻击者向服务器发送一个SYN包,服务器发出一个SYNACK数据包无法收到客户端的ACK包(第三次握手无法完成),服务器端将保持一个非常大名单的半连接 , 消耗大量的CPU时间和内存资源,也能保持此列表中的IP SYNACK的重试 。服务器端将忙于处理攻击者伪造的TCP连接请求以及没有时间忽略正常的客户请求,从正常的客户的角度来看,服务器失去了响应 。
在SCTP四次握手的INIT消息,接收端不保存任何状态信息或分配的任何资源,这样你就可以防止DoS攻击,如SYN洪水 。INIT-ACK消息发送,使用了一种机制 - “状态曲奇”的cookie的发送者建立自己的国家所需的全部信息 。
SCTP产生一个Cookie状态过程如下:
1 。收到的INIT发出的INIT ACK数据块的信息来创建一个关联的TCB(传输控制块) 。
在TCB中,生存在协议参数设置为“有效的Cookie时间 , 创建日期设置为当前日期 。
3根据TCB收集重建的TCB所需的最小的子集的信息 , 这个子集和密钥来产生一个MAC(消息认证码) 。
用最小的子集的信息和MAC产生状态Cookie 。
5 。在发送的INIT ACK(含状态cookie参数),发送者必须删除TCB,以及任何相关的新的关联的本地资源 。
INIT和INIT ACK必须包含建立初始状态所需的参数:一组IP地址 , 以确保可靠的传输的初始TSN,每一个收到的SCTP包中必须包含初始标签,每一端的请求发出的数据流的数量并在每一端可以支持接收的数据流的数量 。交换这些消息 , INIT COOKIE-ECHO消息的发送者被送回的状态Cookie 。接收端在接收COOKIE-ECHO饼干的状态,完成重建自己的国家和回送COOKIE-ACK确认该协会已成立 。COOKIE-ECHO和COOKIE-ACK的用户数据信息可以绑定到每个包 。
因此,使用上述的以这样的方式,即使接收INIT消息,接收终端 , 也没有任何的资源消耗:它既不分配任何系统资源,并且不保存的新的关联的状态,它是只对口援建的状态状态的Cookie作为一个参数,它包含每一个回送的INIT-ACK消息 , 并最终状态cookie COOKIE-ECHO消息发送回 。
2.2 SCTP的数据交换
正常的两个SCTP主机之间的数据交换 。SCTP主机发送SACK块,用来确认每一个收到的SCTP报文 。SACK的完全描述的接收侧的状态,可以使发送侧决定的重发 , 因此 , 在根据对SACK 。SCTP支持TCP快速重传和超时重传算法类似 。
SCTP和TCP数据包丢失,使用不同的机制:TCP序列号空缺已被填补缺口,直到收到,发送丢失的数据包数据的序列号是高于之前 。但是,SCTP即使收到订单的序列号空缺,并会不断发回数据 。
3.3 SCTP关联关闭
面向连接的传输协议,SCTP还可以使用与TCP的三次握手关闭相关,但有一点不同:在“关联关闭”的过程中保持连接打开一个TCP终端,新的数据来自对等体,但不支持TCP SCTP这个“半封闭”状态 。1日发布由主机A“OFF”(关闭)块终止与主机B,主机A就会进入“SHUTDOWN-PENDING”状态,相应的动作是:不再接受上层应用的数据,并且只发送队列中剩余的数据,进入“SHUTDOWN-SENT”状态 。
一旦主机B接收到“OFF”挡,进入“SHUTDOWN-RECEIVED”状态,与主机A,不再接受上层应用的数据,只发送队列中剩余的数据 。
主机A再发送“关闭”块,剩余的数据已经达到主机B发出的通知,并重申 , 该协会正在关闭 。
当第二个获得“关闭”块 , 主机B发送确认关闭“块 。
随后的主机发送“关闭”结束“块完成关闭的关联 。
4结论
SCTP是开发用于传输信令流量,但它有一定的优势,先进的TCP协议机制,如选择性确认,快速重传,无序提交 , 因此,它也满足高性能传输的需求,这将赋予它更广泛的应用的要求 。目前 , 有各种各样的操作系统都支持SCTP,如Linux,AIX和Solaris上,Windows中,FressBSD 。不同的协议之间的互操作性测试取得成功,揭示了SCTP正走向商业产品的道路 。
IEFT致力于SCTP进一步的,以使其更好地满足下一代应用的需求 , 如支持IPv6地址,解决对端的IPv6站点本地和链路本地地址不连接的问题,以及在现有的关联动态添加或删除IP地址 , 而无需重新启动关联 。
此外,在第三代移动通信,SCTP信令承载层的选择之一,它的应用及其性能评价是还待研究 。
参考文献:
linux收发报文命令的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux发送udp报文、linux收发报文命令的信息别忘了在本站进行查找喔 。

    推荐阅读