网络编程1

网络协议和常用网络工具

计算机网络

  • 在计算机之间传递数据
  • 概念:功能完善的网络软件及协议实现资源共享和信息传递的系统
  • 主要网络有哪些
    • 局域网
    • 城域网
    • 广域网
  • 最初的网络–ARPANET
  • 两种最开放的网络平台
    • ISO 提出osi模型
    • IEEE 提出tcp/ip模式
  • Internet互联网从93年开始席卷世界

计算机网络体系结构

TCP/IP模型

  • 1.应用层,对应于osi模型又能继续划分为3层

    • 应用层,为应用程序提供服务
    • 表示层,数据格式转化、数据加密
    • 会话层,建立、管理和维护会话
  • 2.传输层

    • 相当于osi模型的传输层,建立、管理和维护端对端的连接
  • 3.网络层

    • 相当于osi模型的网络层,IP选址及路由选址
  • 4.链路层,对应于osi模型,还能再分两层

    • 链路层,提供介质访问和链路管理
    • 物理层,物理传输
  • osi物理层可以简单理解为网卡、网线,osi链路层可以理解为网卡的驱动程序,网络层向上的功能都是由操作系统完成的

  • 应表会传网数(链)物

TCP/IP协议

  • Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。协议采用了4层的层级结构。然而在很多情况下,它是利用 IP 进行通信时所必须用到的协议群的统称。

  • TCP/IP概念层模型功能TCP/IP协议族
    文件传输、电子邮件、文件服务、虚拟终端TFTP、HTTP、SNMP、FTP、SMTP、DNS、Telnet
    应用层数据格式化、代码转换、数据加密
    解除或建立与别的接点的联系
    传输层提供端与端的接口TCPUDP
    网络层为数据包选择路由IP、ICMP、RIP、OSPF、BGP、IGMP
    链路层传输有地址的帧以及错误检测功能SLIP、CSLIP、PPP、ARP、RARP、MTU
    以二进制数据形式在物理媒体上传输数据ISO2110、IEEE802、IEEE802.2
  • qq中的一些数据传输就是用udp传输的

    • 怎么把udp变可靠?
    • 往上层变可靠,HTTP3就是用udp实现的
  • DNS将域名转换成实际的ip地址

网络传输中的数据

  • 包是全能性术语;

  • 帧用于表示数据链路层中包的单位;

    • “I’m Desson” +TCP包首部+IP包首部+以太网包首部
  • 片是 IP中数据的单位;

    • “I’m Desson” +TCP包首部+IP包首部
  • 段则表示 TCP 数据流中的信息;

    • “I’m Desson” +TCP包首部
  • 消息是指应用协议中数据的单位。

    • “I’m Desson”
  • 用户A发送                                     				  用户B接受
    "I'm Desson"                			     上一层          "I'm Desson"  
    
    #前面是数据,后面附加TCP包首部 				         		"I'm Desson" +TCP包首部 
    "I'm Desson" +TCP包首部              		   传输层			  TCP包首部的解析
        
    #数据+TCP包首部+IP包首部                                  "I'm Desson" +TCP包首部+IP包首部
    "I'm Desson" +TCP包首部+IP包首部     			 网络层	    IP包的解析,识别上一层为TCP
        
    #数据+TCP包首部+IP包首部+以太网包首部
    "I'm Desson" +TCP包首部+IP包首部+以太网包首部   数据链路层       以太网首部解析,识别上一层为ip
        
       以太网光缆--->                              物理层          --->以太网光缆
    

TCP/IP协议链路流转图

  • 			HTTP      在线视频	    Ping命令
    
    应用层      应用程序     应用程序    应用程序  
                 ↑           ↑
       			 ↓           ↓
    传输层        TCP        UDP   
        			 ↖		↑
        				↘   ↑    
    网络层       IGMP ←  ←   IP  →  →   ICMP
                             ↑
                             ↓
    链路层        ARP ←  ←  硬件接口 →  → RARP
                             ↑
                             ↓
    物理传输介质 -----------------------------------------
                    
                    
    ↓→↑←  ↖ ↗ ↘ ↙
    
  • TCP:面向连接的、可靠的流协议

  • UDP:面向无连接的通讯协议

  • IP:在源地址和目的地址之间传送的数据包—寻址

  • ICMP:控制报文协议–辅助

  • IGMP:internet组管理协议

  • ARP:地址解析协议–辅助

  • RARP:反向地址转化协议

  • 如果想越过tcp/ip,直接从数据链路层访问,需要使用原始套接字,但是java无法访问,只能通过c/c++来编写

  • 一般说的tcp dump抓包就是通过访问数据链路层实现的

网络通信中的地址和端口号

MAC地址

  • 以太网适配器  以太网:
       连接特定的  DNS  后缀 . . . . . . . :
       描述. . . . . . . . . . . . . . . :Relatek PCIe GbE Family Controller
       物理地址. . . . . . . . . . . . . :B0-25-AA-35-23-BE
       DHCP 已启用. . . . . . . . . . . . :是
       自动配置已启用 . . . . . . . . . . .:是
       本地连接 IPv6 地址. . . . . . . . . :fe80::c85e:d254:bf25:449a%12(首选)
       IPv4 地址 . . . . . . . . . . . . .:192.168.0.154(首选)
       子网掩码 . . . . . . . . . . . . . .:255.255.255.0
       获得租约的时间 . . . . . . . . . . . :2020年9月15日 10:25:02
       租约过期的时间 . . . . . . . . . . . :2020年9月15日 16:08:59
       ...   
    
    无限局域网适配器 WLAN:
    	媒体状态 . . . . . . . . . . . . . :媒体已断开连接
    	连接特定的DNS后缀 . . . . . . . . . :
    	描述 . . . . . . . . . . . . . . .:Intel(R) Wireless-AC 9462
    	物理地址. . . . . . . . . . . . . .:24-41-8c-26-34-9E
    	DHCP 已启用 . . . . . . . . . . . .:是
    	自动配置已启动 . . . . . . . . . . .:是
    
  • 物理地址,6字节,跟着硬件走的

    • 前24位,全世界同一分类
    • 后24位,网络设备生产厂商自行定义
  • IPv4地址,互联网给网络和主机匹配的一个逻辑地址,并区别物理地址

  • ipv4只有4段,数量相对比较小,ipv6的网络地址更多

IP地址

IP地址和mac地址区别

  • ip地址可改,mac地址不可改
  • 长度不同,前者32位,后者48位
  • 寻址协议不同
    • Ip作用在网络层,网络子网之间的数据通信,
    • mac作用在数据链路层,主要用在局域网内两台设备通信
  • 一台机器怎么找到另一台它要发送数据的机器?
    • 子网网关跟子网内所有机器都有连接
    • 子网a机器要往子网b机器发数据时,是通过广播的形式,同时向子网内所有机器发送,但是消息体的内容是消息体+目标机器的mac地址,接受消息的机器接受到消息会判断发送的mac地址和自己的mac地址是否相同,不同则丢弃
    • 如果是更大的internet网络里面,不是同一个子网怎么办?子网a的网关也会接受到子网a发送的消息,通过对ip地址解析,通过子网掩码计算,发现目标服务器不是当前子网内的机器,网关就会把该消息通过路由器往外部更大的网络传输,一级一级的往外发送,最终跳转到目标服务器,这又牵扯到路由器的路由协议和路由表

端口号

  • 用来识别同一台计算机中进行通信的不同应用程序。因此,它也被称为程序地址

  • 主机 192.168.4.20
    FTP服务器--端口号TCP21
    SSH服务器--端口号TCP22
    SMTP服务器--端口号TCP25
    HTTP服务器--端口号TCP80
    FTP服务器--端口号TCP2000
    HTTP服务器--端口号TCP2001
  • 如果机器上有多个程序在监听消息,此时应该将数据传给哪个应用程序处理呢?

  • 数据+IP

  • 访问的消息上带有需要访问程序的端口号,但是非强制,如果不写,操作系统会分配一个,49152-65535之间随机分配,但是服务器重启就会变化,此时服务器端就无法提供有效的服务

  • 有一些端口号是约定俗成的,0-1023之间不要自己定义,1924-4915在相关部门注册过,但是没有强制不让使用

服务器

  • HTTP服务--端口80   Zookeeper服务--端口2181  Mysql服务--端口3306  更多服务--端口xx
    
    IP地址(可变)       IP地址(可变)
    MAC地址             MAC地址
    网卡1               网卡2
    
  • 每个网卡的mac地址是不同的,并且是它自己独有的

  • 源IP地址       目标IP地址     TCP  源端口号   目标端口号  数据
    192.168.4.22  196.168.4.20  6    2001      80
    192.168.4.22  196.168.4.20  6    2002      80
    192.168.4.21  196.168.4.20  6    2001      80
    
  • IP首部— 源ip地址+目标ip地址+TCP

  • TCP首部— 源端口号+目标端口号

  • 通过源ip地址、目标ip地址、协议号、源端口号、以及目标端口号这五个元素识别一个通信

    • 这样一个五元组就能在网络上唯一的标识一个网络通信

TCP概述

  • 什么是TCP ( Transmission Control Protocol )?

  • TCP的基本特性

    • 面向连接,这是通讯的第一条件,而udp是不需要连接的,所以udp也经常用在广播上

    • 可靠性,我们称tcp为可靠的数据流服务,由于带宽优先,会对传输的数据进行切分,然后一份一份的传输。而可靠性是由超时重传应答确认来保证的。

      超时重传:没有一个确定的数值,需要根据网络情况动态调整,操作系统会采样,每当有发送数据包到另一台服务器,到收到应答的时间,会对这个时间进行采样,然后动态设置超时重传值,这个值就叫做rtt,然后再通过算法和公式平滑这个参数,最终来确定这个重传超时时间rto。

      应答确认:

    • RTT和RTO,rtt–rount trip time,rto–retransmismission time out

    • 数据排序:实际传输时是无法保证按传输顺序到达的,通过标记传输序号,接受端根据序号进行最终的排序

    • 流量控制:两台服务器传输数据,无法保证两台服务器传输速度一致,假设一台服务器发送了100单位,而接受服务器最多接受90个,多余的10个被丢弃掉,但是在tcp当中建立了滑动窗口的概念,两台服务器在通讯的过程中,会协商调整可以接受的数据大小

    • 全双工:两台服务器建立连接后,数据既可以从a发到b,又可以从b发到a,而且同时也是可以的,如果交叉可以发,但是不能同时发,则是半双工

与udp相比

  • udp是允许丢包的,比如视频流,丢一部分包,在视频上根本看不出来

TCP连接中的三次握手–面向连接的含义

  • 源于arpanet网,特点是分散,避免被斩首,一个节点坏了,仍然可以绕过这个节点建立连接

  • 在网络通讯过程中,两台机器之间,数据在传输过程中,会经历很多网络节点,a和b为了通讯,会进行试探,如果可以传输,就会有一个虚拟的通道,虚拟连接/虚拟交换,可能会存在很多连通的路径,之前tcp为什么要求排序,就是因为排序在前的数据包也有可能最后才传到目标服务器

  • 为什么要进行第一次握手?

    • 找出两台机器有没有可达路径,或者有多少条,最近的是哪一条,这都是建立连接的目的

三次握手

  • 建立一个TCP连接时,需要客户端和服务

  • 端总共发送3个包以确认连接的建立。

    • 第一次握手:客户端请求建立连接。
    • 第二次握手:服务端应答客户端,并请求建立连接。
    • 第三次握手:客户端针对服务端请求确认应答。
  • 三次握手全过程
    
    客户端		                            服务器端				
          
        第一次握手
        客户端发送第一次请求
        标志位SYN=1
        序列值seq=43(随机值)
             ---------------------->1
        发送完后,客户端进入SYN_SENT状态
        
        
        		服务器端对第一次请求做出应答
                标志位SYN=1
                #多出的标志位:
                #确认位ACK=1
                #应答值ack=seq+1=44
                #序列值seq=67(随机值)
             2<----------------------
                服务器端发送完毕,进入SYN_RECV状态
        
        
        客户端接收并确认无误后,发送第二次请求
        确认位ACK=1
        #应答值ack=seq+1=68
        #序列号seq=44
             ---------------------->3
        发送完后,客户端进入ESTABLISHED状态
        
        
        		服务端接收后,检查ACK是否为1,ack值是否自增1
                如果都符合,服务器也进入ESTABLISHED状态
        
        
        
        
    
  • SYN-请求包

  • ACK-应答包

  • 确认ack具体增加多少值是跟传输的数据大小相关的,假如是从500开始,一共10字节,则加10,下次客户端发送的数据包应该从511开始

为什么需要3次握手?

  • TCP是面对连接的,所以需要双方都确认连接的建立。i
    • 第一次握手和第二次握手,确定了两台服务器之间是可达的,网络流转是通的
    • 第三次握手是为了防止之前失败的连接请求突然又连接上,造成不必要的网络资源浪费。而第三次握手,已经对客户端的请求做出了应答,此时再有请求也不会应答了。更详细的解释是因为tcp是可靠的传输协议,而三次握手是既可以保证可靠传输,又能提高传输效率的最少次数外,rfc793文档协议规定为了保证可靠的数据传输,tcp传输的双方都必须维护一个序列号,用来标识在网络通信过程中哪些数据包是被对方已经确认的。

TCP的3次握手的漏洞–SYN洪泛攻击

  • 三次握手的第二次握手,服务端向客户端发送应答请求,需要带客户端的IP,由客户端发送请求时获得,现在假设有一个攻击者,假设发送给服务器端的IP是假的,而且是大量发送,这时服务器端也会积极响应,但是是发送到错误的IP地址,迟迟不能完成3次握手,这时服务器端会进入半连接状态。

SYN洪泛攻击

  • 定义:通过网络服务所在的端口发送大量伪造原地址的攻击报文,发送到服务端,造成服务端上的半开连接队列被占满,从而阻止其他用户进行访问。
  • 原理:攻击者客户端利用伪造的IP地址向服务端发出请求(第一次握手),而服务端的响应(第二次握手)的报文将永远发送不到真实的客户端,服务端在等待客户端的第三次握手(永远都不会有的),服务端在等待这种半开的连接过程中消耗了资源,如果有成千上万的这种连接,主机资源将被耗尽,从而达到攻击的目的。
  • 解决方案
    • 无效连接监控释放 — 到达一定阈值,但是会把正常的也移除掉,不推荐
    • 延缓TCB分配方法 — 服务器接收到网络请求,会在操作系统内核分配TCB连接资源(连接操作资源),一般200个字节,这是连接的主要消耗,这也是一种解决思路
    • 防火墙 — 一般采用防火墙,目前最好的
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值