TCP/IP和UDP基础知识学习

OSI参考模型:        TCP/IP参考模型
    ----------------------------------------------------------
    应用层                  应用层                   数据段
    表示层
    会话层
    -----------------------------------------------------------
    传输层                   传输层                   数据包
    -------------------------------------------------------------
    网络层                   网络互联层            数据帧
    -------------------------------------------------------------
    数据链路层            网络接口层            比特
    物理层
    -------------------------------------------------------------
    
网络接口层:负责将二进制流转换成数据帧,并进行数据帧的发送和接受。
网络层:负责将数据帧封装成IP数据报,同时负责选择数据报的路径,即路由。
传输层:负责端到端之间的通信会话的建立与链接。
应用层:负责应用程序的网络访问,这里通过端口号来识别各个不同的进程。

TCP/IP协议实际是一个协议族,可分为三部分:
    一、网络层,包括
        1、Internet协议(IP)
        2、网际控制报文协议(IC-MP)
        3、地址识别协议(ARP)
    二、传输层协议,包括
        1、传输控制协议(TCP):TCP应为应用程序存取网络创造条件,使用可靠的面向连接的传输层服务
        2、用户数据报文协议(UDP):UDP提供不可靠的非连接型传输层服务,它允许在源和目的地站点之间传送数据,而不必在传送数据之前建立对话。
        该协议不使用TCP使用的 端对端差错校验。
    三、应用程序部分,包括
        Telnet、文件传输协议(FTP和TFTP)、简单的文件传输协议(SMTP)和域名服务(DNS)等协议。

TCP协议        
    TCP协议处于传输层,实现了从一个应用程序到另一个应用程序的数据传递。应用程序通过目的地址和端口号来区分接收数据的不同应用程序。
    数据包格式:
        --------------------------------------------------------------
        16位源端口号 16位目的端口号
        32位序列号
        32位确认号
        4位首部长度 保留6位 6位标志字段 16位窗口大小
        16位校验和 16位紧急指针
        -----------------------------------------------------------------
        选项
        数据
        -----------------------------------------------------------------------
        
        序号字段的值:指的是本报文所发送的数据的第一个的序号。
        确认号字段:是指期望收到对方的下一个报文段的数据的第一个字节的序号
        shoubuchangdu
        6个标志字段:
            URG
            ACK
            PSH
            RST
            SYN:同步比特
            FIN:终止比特
        窗口字段用来控制对方发送的数据量,单位为字节
        校验和字段:校验的范围包括首部和数据这两部分
    
    TCP连接建立的过程:
        TCP协议通过3次握手来初始化,目的是使数据段的发送和接收同步,告诉其他主机其一次可接收的数据量,并建立连接。
                SYN J
            -------------------->
                SYNK,ACK J+1
    客户机    <-------------------- 服务机
                ACK K+1
            -------------------->    
            
    UDP协议
    数据包格式
        ------------------------------------------------------
        16位源端口号        16位目的端口号
        16位用户包长度    16位校验和
        ---------------------------------------------------
        数据
        --------------------------------------------------
        源端口号:UDP数据包的发送方使用的端口号
        目的端口号:UDP数据包的接收方使用的端口号
        数据包长度:数据包长度是指包括包头和数据部分在内的总字节数
        校验值:UDP协议使用包头中的校验值来保证数据的安全
        
    UDP协议是一种无连接的协议,因此不需要像TCP那样通过3次握手来建立一个连接。同时,一个UDP应用可同时作为应用的客户或服务器方。
    
TCP通信过程
    一个典型的通信过程如下:
    服务器端                客户端
    socket                        socket ------
      ↓                                   ↓            |
    bind                               bind        |
      ↓                                                 |
    listen                               ↓            |
      ↓                                                  |
    accept      <----------    connect <----
      ↓                                   ↓
    recv/recvfrom <----      send/sendto
      ↓                                   ↓
    send/sendto  ----->      recv/recvfrom
      ↓                                   ↓
    close                            close
     
    工作过程如下:
           首先服务器启动,通过调用socket()建立一个套接字;然后调用bind()将该套接字和本地网络地址联系在一起,在调用listen()使套接字做好侦听的准备,并规定他的请求队列的长度;之后就调用accept()来接受连接。连接一旦建立,客户机和服务器之间就可以通过调用read()和write()来发送和接收数据。最后,待数据传送结束后,双方调用close()关闭套接字。
    
    1、使用socket()创建套接字
        为了建立Socket,程序可以调用Socket函数,该函数返回一个类似于文件描述符的句柄。
    2、使用bind()绑定本地地址
        bind函数将Socket与本机上的一个端口相关联,随后即可在该端口监听服务请求。使用bind()函数,绑定套接字到一个IP地址和一个端口上。
    3、listen()函数
        使用listen()函数将套接字设置为监听,以等待连接请求。
    4、accept()函数
        一般就使用accept()函数来响应连接请求,建立连接并产生一个新的socket描述符来描述该连接,该连接用来与特定的客户端交换信息。
        accept()函数默认为阻塞函数,调用该函数后,将一直阻塞直到用连接请求。
    5、connect()函数
        客户端如果需要申请一个连接,必须调用connect()函数,这个函数的任务就是建立与服务器的连接。
        客户端调用connect()函数来连接服务器,这个函数将启动TCP协议3次握手并建立连接。
        当connect()调用成功之后,就可以使用sockfd作为与服务器连接的套接字描述符,接下来就可以使用I/O函数,如read()、write()、send()和recv()等进行数据传输了。
    6、数据通信
        send()和recv()函数:TCP通信时使用
        sendto()和recvfrom()函数:UDP通信时使用
    7、使用close()函数关闭当前的连接
        
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值