1.TCP/IP簡介
TCP/IP協(xié)議源于1969年,是針對Internet開發(fā)的一種體系結(jié)構(gòu)和協(xié)議標準,目的在于解決異種計算機網(wǎng)絡(luò)的通信問題。使得網(wǎng)絡(luò)在互聯(lián)時能為用戶提供一種通用、一致的通信服務(wù)。是Internet采用的協(xié)議標準。
TCP/IP是一組通信協(xié)議的代名詞,是由一系列協(xié)議組成的協(xié)議簇。它本身指兩個協(xié)議集:
TCP(傳輸控制協(xié)議)。
? IP(互聯(lián)網(wǎng)絡(luò)協(xié)議)。
TCP/IP協(xié)議的基本傳輸單位是數(shù)據(jù)包(Datagram)。
TCP/IP傳輸協(xié)議,即傳輸控制/網(wǎng)絡(luò)協(xié)議,也叫作網(wǎng)絡(luò)通訊協(xié)議。它是在網(wǎng)絡(luò)的使用中的最基本的通信協(xié)議。TCP/IP傳輸協(xié)議對互聯(lián)網(wǎng)中各部分進行通信的標準和方法進行了規(guī)定。并且,TCP/IP傳輸協(xié)議是保證網(wǎng)絡(luò)數(shù)據(jù)信息及時、完整傳輸?shù)膬蓚€重要的協(xié)議。TCP/IP傳輸協(xié)議是嚴格來說是一個四層的體系結(jié)構(gòu),應(yīng)用層、傳輸層、網(wǎng)絡(luò)層和數(shù)據(jù)鏈路層都包含其中。
2.獲取本地網(wǎng)卡信息
??獲取本地網(wǎng)卡信息的方法有很多種,在Linux命令行下我們可以通過ifconfig命令查詢網(wǎng)卡信息。

2.1 通過ioctl函數(shù)獲取網(wǎng)卡信息
??ioctl(input/output control)是一個專用于設(shè)備輸入輸出操作的系統(tǒng)調(diào)用,該調(diào)用傳入一個跟設(shè)備有關(guān)的請求碼,系統(tǒng)調(diào)用的功能完全取決于請求碼。
- ioctl函數(shù)原型:
#include
int ioctl(int fd, unsigned long request, ...);
形參:fd --文件描述符
request --請求命令
第三個參數(shù)為可變參數(shù),該參數(shù)填寫取決于request 命令;
返回值:一般成功返回0
網(wǎng)絡(luò)相關(guān)的請求劃分為6 類:
- 套接口操作
- 文件操作
- 接口操作
- ARP 高速緩存操作
- 路由表操作
- 流系統(tǒng)
下表列出了網(wǎng)絡(luò)相關(guān)ioctl 請求的request 參數(shù)以及arg 地址必須指向的數(shù)據(jù)類型:

獲取網(wǎng)卡信息示例:
#include
#include
#include
#include
#include
#include
#include
#include
int main()
{
int i=0;
int sockfd;
/*創(chuàng)建網(wǎng)絡(luò)套接字*/
if((sockfd = socket(AF_INET, SOCK_STREAM,0))

3.域名解析
域名(英語:Domain Name),又稱網(wǎng)域,是由一串用點分隔的名字組成的Internet上某一臺計算機或計算機組的名稱,用于在數(shù)據(jù)傳輸時對計算機的定位標識(有時也指地理位置)。
由于IP地址具有不方便記憶并且不能顯示地址組織的名稱和性質(zhì)等缺點,人們設(shè)計出了域名,并通過網(wǎng)域名稱系統(tǒng)(DNS,Domain Name System)來將域名和IP地址相互映射,使人更方便地訪問互聯(lián)網(wǎng),而不用去記住能夠被機器直接讀取的IP地址數(shù)串。
#include
extern int h_errno;
struct hostent *gethostbyname(const char *name);
函數(shù)功能:域名解析
形參:name --域名
返回值:
struct hostent {
char *h_name; /* 主機的正式名稱 */
char **h_aliases; /* 別名列表*/
int h_addrtype; /* 主機地址類型*/
int h_length; /* 地址長度*/
char **h_addr_list; /*地址列表 */
}
void herror(const char *s); //錯誤輸出
const char *hstrerror(int err);//根據(jù)錯誤編號返回錯誤消息字符串
示例
#include
#include
#include
#include
#include
#include
int main(int argc,char *argv[])
{
if(argc!=2)
{
printf("格式:./app n");
return 0;
}
//域名解析
struct hostent *host_info=gethostbyname(argv[1]);
if(host_info==NULL)
{
printf("err=%d,%sn",h_errno,hstrerror(h_errno));
return 0;
}
int i=0;
struct in_addr addr;
printf("主機名:%sn",host_info->h_name);
for(i=0;host_info->h_aliases[i]!=0;i++)
{
printf("主機別名:%sn",host_info->h_aliases[i]);
}
for(i=0;host_info->h_addr_list[i]!=0;i++)
{
memcpy(&addr,host_info->h_addr_list[i],sizeof(addr));
printf("ip地址:%sn",inet_ntoa(addr));
}
}
運行效果:

獲取邦定ip地址信息getsockname
getsockname()函數(shù)用于獲取一個套接字的名字。它用于一個已捆綁或已連接套接字,本地地址將被返回。本調(diào)用特別適用于如下情況:未調(diào)用bind()就調(diào)用了connect(),這時唯有g(shù)etsockname()調(diào)用可以獲知系統(tǒng)內(nèi)定的本地地址。在返回時,namelen參數(shù)包含了名字的實際字節(jié)數(shù)。
#include
int getsockname(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
函數(shù)功能:獲取sockfd綁定的ip地址和端口號信息
形 參:sockfd --網(wǎng)絡(luò)套接字
addr --保存返回的ip地址和端口號信息
addrlen --addr緩沖區(qū)大小(必須由用戶設(shè)置大小,函數(shù)調(diào)用成功返回實際addr大小)
返回值:成功返回0,失敗-1
示例:
#include
#include /* See NOTES */
#include
#include
#include
#include
#include /* superset of previous */
#include
int main(int argc,char *argv[])
{
if(argc!=3)
{
printf("格式:./app n");
return 0;
}
/*創(chuàng)建網(wǎng)絡(luò)套接字*/
int sockfd=socket(AF_INET, SOCK_STREAM,0);
if(sockfd==-1)
{
printf("創(chuàng)建網(wǎng)絡(luò)套接字失敗n");
return 0;
}
/*連接服務(wù)器*/
struct sockaddr_in addr=
{
.sin_family=AF_INET,//IPV4
.sin_port=htons(atoi(argv[1])),//服務(wù)器端口號
.sin_addr=
{
.s_addr=inet_addr(argv[2]),//服務(wù)器IP
}
};
if(connect(sockfd,(struct sockaddr *)&addr,sizeof(addr)))
{
printf("連接服務(wù)器失敗n");
return 0;
}
printf("服務(wù)器連接成功n");
struct sockaddr_in c_addr;
socklen_t addrlen=sizeof(c_addr);
getsockname(sockfd,(struct sockaddr *)&c_addr, &addrlen);
printf("本地信息%s:%dn",inet_ntoa(c_addr.sin_addr),ntohs(c_addr.sin_port));
while(1)
{
}
}
審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
嵌入式
+關(guān)注
關(guān)注
5122
文章
19424
瀏覽量
312794
-
網(wǎng)卡
+關(guān)注
關(guān)注
4
文章
319
瀏覽量
27743
-
編程
+關(guān)注
關(guān)注
88
文章
3671
瀏覽量
94668
-
TCP
+關(guān)注
關(guān)注
8
文章
1395
瀏覽量
80082
發(fā)布評論請先 登錄
相關(guān)推薦
為什么我將一個域名解析到了服務(wù)器的Ip,但是仍然無法訪問?
有兩個原因,一個原因是您的域名解析還沒有生效,一般解析之后生效的時間是1-2小時。請點擊開始,選擇運行,然后輸入 ping 您的域名地址,比如 ping www.abc.com
發(fā)表于 11-22 00:38
[討論]域名解析了,網(wǎng)站卻打不開的原因
域名解析了,網(wǎng)站卻打不開的原因 有兩個原因,一個原因是您的域名解析還沒有生效,一般解析之后生效的時間是1-2小時。請點擊開始,選擇運行,然后輸入 ping 您的域名地址,比如 ping
發(fā)表于 11-25 18:54
華為mu509支持域名解析嗎?
最近調(diào)試3G模塊,mu203說明書里AT指令沒DNS域名解析介紹,請問哪位大俠知道它到底支不支持域名解析?還有mu509支持嗎?
發(fā)表于 07-12 10:07
mu203有域名解析功能嗎?
內(nèi)容最近調(diào)試3G模塊,mu203說明書里AT指令沒DNS域名解析介紹,請問哪位大俠知道它到底支不支持域名解析?謝謝
發(fā)表于 07-12 10:10
【BPI-M64試用體驗】如何判斷網(wǎng)絡(luò)是否公網(wǎng)ip及動態(tài)域名解析介紹
諒。------------------------------------------------------------------------------------------公網(wǎng)ip是全球唯一的,所以你要想在家外訪問到家中的計算機,在不用域名解析的情況下就要求你要有公網(wǎng)ip。內(nèi)網(wǎng)ip是經(jīng)過網(wǎng)絡(luò)地址轉(zhuǎn)換(N
發(fā)表于 06-21 01:10
如何解決DNS解析錯誤故障
沒有辦法的時候在用)小知識:每個windows系統(tǒng)都有個HOSTS文件,它的作用是加快域名解析,方便局域網(wǎng)用戶,屏蔽網(wǎng)站,順利連接系統(tǒng)等功能。3:清除DNS緩存信息的方法“開始->運行->
發(fā)表于 09-29 15:14
沒有操作系統(tǒng)真的不能使用LwIP套接字和域名解析嗎?
裸機移植了LwIP協(xié)議棧,整體感覺不錯但是在使用套接字(Socket)功能和域名解析(lwip_gethostbyname)時發(fā)現(xiàn)編譯通不過,說是要啟用操作系統(tǒng)。如果不用操作系統(tǒng)就只能用RAW
發(fā)表于 08-22 22:25
esp32連接手機熱點無法解析域名是什么原因?
版本:idf3.3.3硬件:esp32-worver-e esp32連接手機熱點后(紅米 note9 pro)成功后。無法進行域名解析。直接使用IP可以進行連接。esp32 連接筆記本熱點,無線路由器等能正常使用域名連接。這個是什么原因?是手機熱點沒有
發(fā)表于 02-16 07:24
動態(tài)域名解析、E-mail的工作原理
闡述動態(tài)域名解析、E-mail 工作原理,重點介紹SMTP 及安全認證,在linux 下用動態(tài)域名解析與Sendmail+SASL 構(gòu)建安全、經(jīng)濟而實用的動態(tài)郵件服務(wù)器。為中小企業(yè)、部門架建小型服務(wù)器提
發(fā)表于 08-06 08:59
?35次下載
域名解析是什么意思?
域名解析是互聯(lián)網(wǎng)基礎(chǔ)設(shè)施中至關(guān)重要的一部分。 域名解析包括兩個主要的步驟: 1、域名查詢:當我們在瀏覽器中輸入一個域名(例如,www.hengxun.cn),我們的計算機首先需要查詢
域名解析是什么 為什么要進行域名解析
什么是域名解析?相信很多之前沒有接觸過建站的人不了解什么是域名解析,也不知道具體有啥作用。比如我們在地址欄里輸入“www.ipdatacloud.com”并點擊回車,展示出來的就是IP數(shù)據(jù)
西藏節(jié)點啟動,提升域名解析速度
近日,中國互聯(lián)網(wǎng)絡(luò)信息中心與中國電信集團有限公司西藏自治區(qū)分公司攜手宣布,雙方合作建設(shè)的國家頂級域名西藏解析節(jié)點(簡稱“西藏節(jié)點”)已正式投入使用,為當?shù)赜脩魩砀涌焖俸头€(wěn)定的網(wǎng)絡(luò)服務(wù)。 西藏節(jié)點
【教程】DNS域名解析服務(wù)systemd-resolved使用指南
客戶端?DNS服務(wù)器?域名對應(yīng)的IP地址DNS解析大致過程:?用戶在應(yīng)用程序中使用域名?應(yīng)用程序調(diào)用DNS客戶端申請域名解析?DNS客戶端向DNS服務(wù)器發(fā)送待
評論