网络编程:(一)网络基础知识

目录

1. 网络通信

2.网络协议的层次模型

3. 网络数据是如何进行传输的

4.路由器接口

5.互联网地址(ip地址)

6.端口号

7.socket

8. 字节序问题

9.基本的TCP/UDP套接字的编程流程

10.TCP编程流程


1. 网络通信

通信/通讯需要具备的两个基本条件:
        (1)物理媒介(物理层面)
              光纤
              
        (2)协议(软件层面)
              网络协议

2.网络协议的层次模型

层次:
        把不同的功能封装成不同的功能模块,为什么叫层次?
            
    OSI七层模型:开放式系统互联
        
        
    TCP/IP四层模型:
            应用层: 数据发送的格式
                应用协议:
                    http
                    ftp
                    DNS
                    QQ协议:
                    ...
                    
            传输层:
                主要作用解决数据如何传输的问题
                TCP/UDP
                
                TCP :Transport Control Protocol 传输层控制协议
                    是一种面向连接的传输层协议,他能够提供高可靠性通信
                    (数据无误,数据无丢失,数据无失序,数据无重复到达)的通信
                    
                    ==》建立连接
                        “三次握手、四次挥手”
                        重发机制                        
                    
                    “面向连接”
                    
                UDP:User Datagram Protocol 用户数据报协议
                    是一种不可靠的无连接的协议。它在数据发送前根据就不需要进行连接,所以他可以
                    进行高效率的数据传输
                    
                    "实时应用"
                        
            网络层:
                IP  ===>(网卡的逻辑编号)
                
            设备驱动和硬件:
                硬件:
                    网卡
                    网线
                    
                    MAC协议 :MAC地址(网卡的物理地址 :48bits)

3. 网络数据是如何进行传输的

分层传输
        数据封装  数据拆包

4.路由器接口

路由器的WAN和LAN口
        WAN:接外部IP地址用,通常指出口,转发来自内部LAN接口的IP数据包
        LAN:接内部IP地址用,LAN内部就是一个交换机
        
        路由器也可不连接WAN口,把路由器当做是一个交换机来用
        
        主要功能  “路由”
            选择网络数据包的下一站
            
    网关:
        连接了两个或两个以上的网络
        
    交换机:
        扩展网口
        
    光猫: Modern 调制解调器

5.互联网地址(ip地址)

互联网上每个接口(网卡)都必须有一个唯一的Internet地址(称为IP地址)
        协议上的一个逻辑地址。进行网络通信时候,用这个ip地址唯一标识一台主机
        
        ipv4:32bits
        ipv6:128bits        
    
    ipv4地址有32bits
        网段号:用来标识某个网段
                ip地址连续的高位
        主机号:
            用来标识特定网段中特定的主机
               在ip地址中连续的地位
    ipv4和ipv6的区别:
        ipv6的地址空间更大,ipv6将原来的32位地址空间增大到了128位,数目是2的128次方;
        ipv4使用地址解析通讯协议,ipv6使用多点传播消息取代地址解析通讯协议;
        ipv6具有更高的安全性,在使用ipv6网络中,用户可以对网络层的数据进行加密,极大的提高了网络安全性。
               
    表现形式:点分式十进制
            “192.168.3.5”  最后都会换成一个32位的无符号的整数
            
        ip地址范围                              私有ip地址范围
A:    0 网络号(7bits) 主机号(24bits)
    0.0.0.0 ~ 127.255.255.255                10.0.0.0 ~ 10.255.255.255
     
B:  1 0 网络号(14bits) 主机号(16bits)    
    128.0.0.0 ~ 191.255.255.255                172.16.0.0 ~ 172.31.255.255
    
C:  1 1 0 网络号(21bits) 主机号(8bits)
    192.0.0.0 ~ 223.255.255.255             192.168.0.0 ~ 192.168.255.255
    
D:  1 1 1 0 多播组号(28bits)    
    224.0.0.0 ~ 239.255.255.255
    
E:  1 1 1 1 0 (留待后用)

    在设置一个ip的时候,可以指定这个地址中哪些bits是网段号,哪些是主机号
    
    netmask(子网掩码):
            netmask 为bit 位  为1就是网段号 , 为0的就是主机号
            
            eg:255.255.255.0
            ip: 192.168.5.6
            
                ==》ip中高3字节就是网段号,低字节是主机号
                
            192.168.1.4 和 192.168.3.5  不在同一个网段

            netmask :255.255.114.0  这个netmask 是不是合法的?
                    11111111 11111111 01110010 00000000
                        
                    不合法的,
                    合法的子网掩码:要是连续的1和连续的0
                    
            netmask :255.255.192.0  这个netmask 是不是合法的?
                    11111111 11111111 11000000 00000000 合法的
                    
                    
                192.168.128.3  
                192.168.130.3  
            
                假设子网掩码是 :255.255.255.0  不能互通
                
                        255.255.0.0

6.端口号

TCP和UDP 采用16bits来表示你的应用程序
        IP地址只能唯一标识一台网络中主机,但是每台主机上并不是
        只有一个网络应用程序,他可以跑很多网络应用程序,而且网络应从传输层
        来看可以分TCP应用和UDP应用,为了区分这些网络应用,用端口号来区分
        
        端口号:本质是无符号的short类型
                范围:0 ~ 65535
                
        
        众所周知:1 ~ 1023
            
        注册端口:1024~49151

7.socket

一个编程接口(网络编程的接口)
    是一种特殊的文件描述符(write/read)
    并不仅仅局限于TCP/IP
    
    独立于具体协议的网络编程接口,这个接口位于应用层与传输层之间
    
    socket类型:
        (1)流式套接字(SOCK_STREAM)
            面向字节流,针对传输层协议为TCP的应用
            
        (2)数据报套接字(SOCK_DGRAM)
            针对传输层协议为UDP的应用
            
        (3)原始套接字 (SOCK_RAM)
            直接跳过传输层

8. 字节序问题

大部分PC机上当应用程序把数整数送给socket之前,需要转化成网络字节序。应用程序从socket取出整数之后要转化成小端字节序
            
    大端模式:低地址存数据的高字节
    小端模式:低地址存数据的低字节
    
    网络字节序 :大端模式

9.基本的TCP/UDP套接字的编程流程

任意一个网络应用程序都有客户端和服务端
    
        都要确定三个东西:ip + 传输层协议 + 端口号

10.TCP编程流程

client:
        (1)创建套接字  socket()
        (2)准备服务器的网络地址
        (3)连接服务器 connect()
        (4)进行通信  (读写,发送接收)
        (5)断开连接  close
        
    server:
        (1)创建套接字  socket()
        (2)准备服务器的网络地址
        (3)绑定服务器 bind()
        (4)监听客户端的请求  listen()
        (5)接受客户端的请求  accept()
        (6)进行通信  (读写,发送接收)
        (7)断开连接  close

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值