tcp/ip学习笔记

Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议层次概述从协议分层模型方面来讲,TCP/IP由四个层次组成:网络接口层、网络层、传输层、应用层。   

TCP/IP
应用层 HTTP FTP SMTP
传输层 TCP UDP
网络层 IP ICMP
数据链路层 ARP
物理层 物理介质

====================================================================================================================================

ARP,即地址解析协议,实现通过IP地址得知其物理地址。在TCP/IP网络环境下,每个主机都分配了一个32位的IP地址,这种互联网地址是在网际范围标识主机的一种逻辑地址。为了让报文在物理网路上传送,必须知道对方目的主机的物理地址。这样就存在把IP地址变换成物理地址的地址转换问题。以以太网环境为例,为了正确地向目的主机传送报文,必须把目的主机的32位IP地址转换成为48位以太网的地址。这就需要在互连层有一组服务将IP地址转换为相应物理地址,这组协议就是ARP协议。另有电子防翻滚系统也称为ARP。

arp -n (不做解析,理论缓存15分钟)
[root@localhost ~]# arp -n
Address HWtype HWaddress Flags Mask Iface
192.168.1.254 ether 00:0C:29:30:C1:B6 C eth0
c表示已经完成查询

arp -d 192.168.1.68
tcpdump -i eth0 -nn arp -w /tmp/tcpdump.arp

arp欺骗
arping 192.168.1.2 (回应3个MAC)


arp -s IP MAC
arp -n

[root@node1 ~]# tcpdump -i eth0 -nn arp -v
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
05:13:29.615975 arp who-has 172.16.1.1 tell 172.16.1.6
05:13:29.663774 arp reply 172.16.1.1 is-at 00:0c:29:24:44:0a
05:13:29.663950 arp reply 172.16.1.1 is-at 00:0c:29:24:44:14

====================================================================================================================================

ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、
主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。


tcpdump -i eth0 -nn icmp -w /tmp/tcpdump.icmp

[root@node1 ~]# tcpdump -i eth0 -nn icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
10:46:14.591244 IP 172.16.1.6 > 192.168.1.1: ICMP echo request, id 6187, seq 1, length 64
10:46:14.593758 IP 192.168.1.1 > 172.16.1.6: ICMP echo reply, id 6187, seq 1, length 64

[root@localhost ~]# ping 192.168.1.1 -s 4000 -c 1

[root@node1 ~]# tcpdump -i eth0 -nn icmp -v
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
10:49:36.929205 IP (tos 0x0, ttl 64, id 8775, offset 0, flags [+], proto: ICMP (1), length: 1500) 172.16.1.6 > 192.168.1.1: ICMP echo request, id 31787, seq 1, length 1480
1500=1472+20+8
10:49:36.929508 IP (tos 0x0, ttl 64, id 8775, offset 1480, flags [+], proto: ICMP (1), length: 1500) 172.16.1.6 > 192.168.1.1: icmp 分片时上层协议不会添加
1500=1480+20
10:49:36.929876 IP (tos 0x0, ttl 64, id 8775, offset 2960, flags [none], proto: ICMP (1), length: 1068) 172.16.1.6 > 192.168.1.1: icmp
1068=1048+20
10:49:36.930050 IP (tos 0x0, ttl 64, id 2891, offset 0, flags [+], proto: ICMP (1), length: 1500) 192.168.1.1 > 172.16.1.6: ICMP echo reply, id 31787, seq 1, length 1480
10:49:36.930082 IP (tos 0x0, ttl 64, id 2891, offset 1480, flags [+], proto: ICMP (1), length: 1500) 192.168.1.1 > 172.16.1.6: icmp
10:49:36.930193 IP (tos 0x0, ttl 64, id 2891, offset 2960, flags [none], proto: ICMP (1), length: 1068) 192.168.1.1 > 172.16.1.6: icmp

[root@node1 ~]# tshark -i eth0 -nn icmp -V

===================================================================================================================================

IP
  IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层---TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是按顺序发送的或者没有被破坏。IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。

Version (4) | Header Length (4) | Type service (8) | Total Length(16)
Identifier (16) | Flag (3) | Fragment offset (13)
Time to live (8) | Protocol (8) | Header Checksum (16)
Source Address (32)

Destination address (32)


Version (4)
版本:IP版本号

Header Length (4)
报头长度(IHL):数据包报头的大小。选项字段表示报头大小不固定,而协议在处理数据包时需要了解报头结束和数据开始的位置,因此需要此字段

Type service (8)
服务类型:数据的服务质量优先级;路由器可以根据它为语音和网络路由信息提供高于常规数据的优先级

Total Length(16)
数据包长度:报头报头和数据在内的整个数据包的大小,以字节为单位。最小长度的数据包为20个字节(20字节报头+0字节数据),而最大长度则为65535,
这是此16位字段能够提供的最大值

Flag (3)
标志:这些3位字段代表控制标志,如DF和MF


Fragment offset (13)
片偏移量:接收方通过这些13位字段来确定某个数据片在原始IP数据报中的位置


Time to live (8)
生存时间:丢弃数据报之前允许的跳数;每经过一跳,此值都要减一,以此防止数据包在路由环路的网络中无限期传送。


Protocol (8)
协议:数据负载的协议类型:表示该数据是UDP数据报还是TCP数据段,因为这些传输层协议管理其PDU接收的方式不同


Header Checksum (16)
报头校验和:用于对数据包报头执行差错校验。在每一跳都必须将报头的校验和与此字段的值进行比较。如果报头检验和的值与计算出的校验和不符,则会丢弃该数据包。
在每一跳都会减少TTL字段的值,而且还可能执行分片,因此必须在每一跳重新计算校验和。注意:此校验和仅适用于报头而不用于封装的数据。


Source Address (32)
源地址:发送数据包的主机的IPv4地址;在数据包通过网际网络传输的整个过程中保持不变。目的主机可以在需要时根据它对源主机做出响应


Destination address (32)
目的地址:要接收数据包的主机的IPv4地址;在数据包通过网际网络传输的整个过程中保持不变。每一跳的路由器可以根据它将数据包转发到目的主机。


Options 选项:
报头为提供其它服务而另行准备的字段;极少使用


Padding

====================================================================================================================================
TCP
   TCP是面向连接的通信协议,通过三次握手建立连接,通讯时完成时要拆除连接,由于TCP是面向连接的所以只能用于点对点的通讯。   
TCP提供的是一种可靠的数据流服务,采用“带重传的肯定确认”技术来实现传输的可靠性。
TCP还采用一种称为“滑动窗口”的方式进行流量控制,所谓窗口实际表示接收能力,用以限制发送方的发送速度。
面向连接的服务(例如Telnet、FTP、rlogin、X Windows和SMTP)需要高度的可靠性  

Source Port (16) | Destination Port (16)
Sequence Number (32)
Acknowledgment Number (32)
Data Offset(4) | Reserved (6)|UGR|ACK|PSH|RST|SYN|FIN|Window(16)
Checksum (16) | Urgent Pointer (16)

Source Port (16)
源端口:在设备上开放连接的TCP会话,通常是大于1023的随机值。


Destination Port (16)
目的端口号:标识远程站点上的上一层协议或应用程序。

Sequence Number (32)
序列号:指定数据段中最后一个二进制八位数(字节)的编号。

Acknowledgment Number (32)

Data Offset(4)
报头长度:指定数据段报头的长度,以字节为单位

Reserved (6)

|UGR|ACK|PSH|RST|SYN|FIN
URG---紧急指针
ACK---确认字段
PSH---推送功能
RST---重置连接
SYN---同步序列号
FIN---发送方已传输完所有数据

Window(16)

Checksum (16)
TCP校验和:用于对报头和数据进行差错校验。

Urgent Pointer (16)
紧急指针:只在包含URG(紧急)标志时使用
TCP

1.三次握手
2。四次挥手
3.确认机制
4.TCP标记 SYN ACK FIN RST PUSH URG
5.RTT(Round Trip Time)往返传输时间,在一个往返时间内此数据段的确认段必须收到 某一个片丢失会重传整个数据段
6.TCP通过滑动窗口协议来进行流量控制
7.TCP 连接状态

ssh IP

攻击手段(传输层)
TCP syn洪水
1主机攻击 DOS
多台主机攻击 DDOS

内存中128M空间存1024个半连接状态

echo 2 > /proc/sys/net/ipv4/tcp_synack_retries 3秒重试第一次,3X2第二次,3X2X2第三次 。。。
echo 1024 > /proc/sys/net/ipv4/tcp_max_syn_backlog
echo 1 > /proc/sys/net/ipv4f/tcp_syncookies 1 打开 tcp半连接某种理论程度无限大

发现访问速度很慢
1。netstat -na | grep SYN_RESV
2。停服务
3。抓包(只抓SYN)
4。批量加iptables规则 sip DROP
5。启动服务测试


回收再利用time_wait状态
[root@localhost Documentation]# cat /proc/sys/net/ipv4/tcp_tw_recycle
0
[root@localhost Documentation]# cat /proc/sys/net/ipv4/tcp_tw_reuse
0
==================================================================================================================================
UDP
   UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。   
UDP通讯时不需要接收方确认,属于不可靠的传输,可能会出丢包现象,实际应用中要求在程序员编程验证。   
UDP与TCP位于同一层,但它不管数据包的顺序、错误或重发。
UDP主要用于那些面向查询---应答的服务,例如NFS。相对于FTP或Telnet,这些服务需要交换的信息量较小。
使用UDP的服务包括NTP(网络时间协议)和DNS(DNS也使用TCP)。   
===========================================================================================================================

你可能感兴趣的:(TCP/IP)