首页 > 其他分享 >20201302姬正坤第十三章学习笔记

20201302姬正坤第十三章学习笔记

时间:2022-11-13 22:26:16浏览次数:64  
标签:me UDP IP TCP 姬正坤 第十三章 IP地址 20201302 接字

# Linux十三章——TCP/IP网络编程

TCP/IP协议

  • TCP/IP协议:TCP代表传输控制协议。 IP代表互联网协议。目前有两个版本的IP,即IPv4和IPv6,IPv4使用32位地址,IPv6使用128位地址。TCP/IP各个层级及使用的协议如下图所示
    image

IP

(1)IP协议

  • ip协议用于在ip主机之间发送/接收数据包,但IP协议并非可靠的协议,在IP层上面实现可靠性

(2)IP主机和IP地址

  • 主机是支持TCP/IP协议的计算机或设备。每个主机由一个32位的IP地址来标识。32位的IP地址号通常用点记法表示。IP地址分为两部分,即NetworkID字段和HostID字段。根据划分,IP地址分为A~E类,不同的类主机号和网络号所占位数不同。

(3)IP数据包格式

  • IP数据包包括IP头、发送方IP地址、接收方IP地址、数据、数据包的总长度、数据包使用TCP还是UDP、生存时间(TTL)计数、错误检测的校验和等。每个IP数据包的大小最大为64KB。
    image

(4)路由器

  • 路由器是接收和转发数据包的特殊IP主机,如果IP主机相距很远,需要借助路由器来转发数据包。每个IP包在1P报头中都有一个8位生存时间(TTL)计数,其最大值为255。在每个路由器上,TTL会减小1。如果TTL减小到0,而包仍然没有到达目的地,则会直接丢弃它

UDP

  • UDP:用户数据报协议,在IP上运行,用于发送/接收数据报。UDP不能保证可靠性。我们常用的ping命令使用的协议就是UDP

TCP

(1)TCP

  • 传输控制协议,是一种面向连接的协议,用于发送/接收数据流。TCP也可在IP上运行,它保证可靠的数据传输。

(2)端口编号

  • 在各主机上,多个应用程序(进程)可同时使用TCP/UDP.每个应用程序由三个组成部分唯一标识:应用程序=(主机IP,协议,端口号),协议是TCP或UDP,端口号是分配给应用程序的唯一无符号短整数。要想使用UDP或TCP,应用程序(进程)必须先选择或获取一个端口号。下图给出了常见的应用程序的默认端口号
    image

网络和主机字节序

  • 计算机可以使用大端字节序,也可以使用小端字节序。在互联网上,数据始终按网络序排列,就是大端。一些库函数比如htons()、htonl()、ntohs()、ntohl()等可以在主机序和网络序之间转换数据。

TCP/IP网络中的数据流

  • 随着报文一层层下传,每一层都会在前面加上这一层专属的报头。在接收端恰恰相反,随着报文一层层上传,报头被每一层分别剥离以解析收到的数据。
    image

套接字编程

(1)套接字API

  • 在网络编程中,TCP/IP的用户界面是通过一系列C语言库函数和系统调用来实现的,这些函数和系统调用统称为套接字API。为了使用套接字API,我们需要套接字地址结构,它用于标识服务器和客户机。netdb.h和sys/socket.h中有 套接字地址结构的定义。
    image

(2)创建套接字

(3)UDP套接字

image

(4)TCP套接字

image

主机名和IP地址

  • 如果在不同的主机上运行服务器和客户机,服务器端口号由操作系统内核分配,则需要知道服务器的主机名或IP地址及其端口号。如果某台计算机运行TCP/IP,它的主机名通常记录在/etc/hosts文件中。库函数gethostname(char *name, sizeof(name))在name数组中返回计算机的主机名字符串。struct hostent *gethostbyname(void *addr, socklen_t len, int typo)可以用来获取计算机的全名及其IP地址

实践

点击查看代码
//udp_server.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/ip.h>

#define BUFLEN 256 // max length of buffer
#define PORT 1234 // fixed server port number 

char line[BUFLEN];
struct sockaddr_in me, client;
int sock,rlen,clen=sizeof(client);

int main()
{
    printf("1.createaUDP socket\n");
    sock =socket(AF_INET,SOCK_DGRAM, IPPROTO_UDP);

    printf("2. fill me with server address and port number\n");
    memset((char*)&me,0,sizeof(me));
    me.sin_family=AF_INET;
    me.sin_port=htons(PORT);
    me.sin_addr.s_addr=htonl(INADDR_ANY);// use localhost

    printf("3. bind socket to server IP and port\n");
    bind(sock,(struct sockaddr*)&me, sizeof(me));

    printf("4.wait for datagram\n");
    while(1)
    {
        memset(line,0,BUFLEN);
        printf("UDP server: waiting for datagram\n");

        rlen=recvfrom(sock,line,BUFLEN,0,(struct sockaddr *)&client,&clen);
        printf("received a datagram from [host:port]=[%s:%d]\n",inet_ntoa(client.sin_addr),ntohs(client.sin_port));
        printf("rlen=%d:line=%s\n",rlen,line);
        printf("send reply\n");
        sendto(sock,line, rlen,0,(struct sockaddr *)&client,clen);
    }
}


![image](/i/l/?n=22&i=blog/2166633/202211/2166633-20221113221250328-978513972.png)

标签:me,UDP,IP,TCP,姬正坤,第十三章,IP地址,20201302,接字
From: https://www.cnblogs.com/wafmr-123/p/16887170.html

相关文章

  • 第十三章—TCP/IP和网络编程
    第十三章—TCP/IP和网络编程摘要TCP/IP和网络编程,分为两个部分。第一部分TCP/IP协议及其应用,具体包括TCP/IP栈、IP地址、主机名、DNS、IP数据包和路由器;TCP/P网络中......
  • 第十三章
    一、学习笔记二、遇到问题php和html的区别三、解决方法经过网上查询得知:1.html是超文本标记语言,而PHP是服务器的语言;2.html主要用在客户端的显示,而主要用来对处......
  • 《Unix/Linux系统编程》第十三章学习笔记
    第13章TCP/IP和网络编程摘要本章论述了TCP/IP和网络编程,分为两个部分。第一部分论述了TCP/IP协议及其应用,具体包括TCP/IP栈、IP地址、主机名、DNS、IP数据包和路由器......
  • Unix/Linux系统编程第十三章学习笔记
    第十三章TCP/IP和网络13.2TCP协议TCP/IP(Comer1988,2001;RFC11801991)是互联网的基础。TCP代表传输控制协议。IP代表互联网协议。目前有两个版本的IP,即IPv4和IPv6。IPv4使......
  • 第十三章学习笔记
    TCP/IP和网络编程本章论述了TCP/IP和网络编程,分为两个部分。第一部分论述了TCP/IP协议及其应用,具体包括TCP/IP栈、IP地址、主机名、DNS、IP数据包和路由器;介绍了TCP/P网......
  • 20201306吴龙灿第十三章学习笔记
    知识点归纳第十三章TCP/IP和网络编程学习目标通过本章的学习,了解TCP/IP协议及其应用,包括TCP/IP协议栈,ip地址,主机名,DNS,IP数据包和路由器;理解TCP/IP协议簇中的UDP和TCP......
  • 20201208史逸霏第十三章学习笔记
    第十三章读书笔记13.1TCP/IP协议IPv432位地址IPv6128位地址TCP/IP的哥哥层级以及每一层及的代表性组件及其功能顶层是使用TCP/IP的应用程序,用于登录到远程主机......
  • 20201302姬正坤第十二章学习笔记
    Linux第十二章——块设备I/O和缓冲区管理块设备I/O缓冲区读写普通文件的算法依赖于两个关键操作,即:get_block和put_block,这两个操作将磁盘块读写到内存缓冲区中。I/O缓......
  • 20201302姬正坤第六章学习笔记
    Linux第六章——信号和信号处理一、信号和中断人员中断进程中断硬件中断进程的陷阱错误二、Unix/Linux中的信号处理1、信号的来源来自硬件中断的信号来自异常......
  • 20201302姬正坤cat user
    数据块:超级快用来储存文件系统本身的信息inode结点:存放节点,储存文件属性、所有者、权限等信息数据区:分块存储文件数据,不连续存储存储模式示意......