質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

アーキテクチャ

アーキテクチャとは、情報システム(ハードウェア、OS、アプリケーション、ネットワーク等)の設計方法、設計思想、設計思想に基づいて構築されたシステム構造をアーキテクチャと呼びます

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

Q&A

解決済

2回答

8603閲覧

ソケットプログラミングにおけるエンディアン

strike1217

総合スコア651

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

アーキテクチャ

アーキテクチャとは、情報システム(ハードウェア、OS、アプリケーション、ネットワーク等)の設計方法、設計思想、設計思想に基づいて構築されたシステム構造をアーキテクチャと呼びます

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

0グッド

0クリップ

投稿2016/12/29 13:03

ポート番号やIPアドレスはネットワークバイトオーダーとして、ビッグエンディアンで統一されていますが、C言語などのプログラミングででてくる
send()やrecv()などの関数で送受信するデータ実体もネットワークバイトオーダー(ビッグエンディアン)で通信しているんですか??
データ自体は関係ないのですか?

以前、ホストバイトオーダーをチェックするプログラムを作成できたんですが、
このネットワークのペイロード内のエンディアンを確認するプログラムって作れるんでしょうか??

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

こんにちは。

send()やrecv()などの関数で送受信するデータ実体もネットワークバイトオーダー(ビッグエンディアン)で通信しているんですか??

ペイロードの中身がint型なのか、short型なのか、char型なのかの情報をプロトコル・スタックには与えていませんので、プロトコル・スタック側でエンディアン変換できません。

従って、send()/recv()へ渡したままの姿で送受信されます。
もし、エンディアン変換が必要なら自分でするしかないです。

投稿2016/12/29 13:46

編集2016/12/29 13:46
Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

strike1217

2016/12/30 03:50

ありがとうございます。 「そのままの姿で渡される」というのはどういうことでしょうか? 物理層まで落とすとデータ部分も2進数の世界に入っていきますよね?
ikedas

2016/12/30 05:08

ソケットプログラミングの話をしているんですから、物理層なわけないでしょう。
strike1217

2016/12/30 05:57

あ!! なるほど! ありがとうございます
strike1217

2016/12/30 06:20

物理層までデータを落としていくのはOSの役割ですよね。 そしたら、物理層まで落ちたデータのエンディアンはどうなっているんでしょうか??
Chironian

2016/12/30 09:01

エンディアンは数値をバイト列へ変換する時の概念です。 変換されたバイト列を物理層で送受信する時エンディアンの概念は存在しません。
strike1217

2016/12/30 09:19

あ!そうですの! では、ネットワークにおける、データをバイト列に変換するときの・・・エンディアンはどうなっているのでしょうか? ん・・・どこかでISO参照モデルのどこかで、ビッグエンディアンかリトルエンディアンに変換する必要はないのですか? エンディアンの概念は物理層で送受信されている時の話ではないということですよね・・・
strike1217

2016/12/30 11:24

あ! もしかして、「そのまま」というのはビッグエンディアンのことですか??
Chironian

2016/12/30 11:25

> では、ネットワークにおける、データをバイト列に変換するときの・・・エンディアンはどうなっているのでしょうか? ペイロードの話ですよね? ペイロードのデータは誰が作りますか? その作る人(通常はソケットを使ってプログラムする人)がバイト列を生成しますので、必要に応じてそのプログラマがエンディアン変換します。 どうも私は同じことを何度も回答しているような気がします。たぶん言葉では伝わりません。 一度ソケットでint型データを送受信するプログラムを作ってみるとよいと思いますよ。 リトル・エンディアンで送受信するものと、ビック・エンディアンで送受信するものの両方を作ると完全に理解できると思います。
strike1217

2016/12/30 11:31

プログラマがエンディアン変換するのですか! あひゅーーーー わかりました。 テストプログラムを作って、やってみます。 ありがとうございます。
strike1217

2016/12/30 11:35

ペイロード部分もエンディアンを共通化しないと、異なるホストバイトオーダーを採用しているCPUでは、データの表示が真逆になってしまうのでは?? ・・・・と思ったのです。
strike1217

2016/12/30 11:39

あ!「数値をバイト列に変換する時の概念がエンディアン」なら、char型のような・・・ 例えば、ペイロード部分が、 you will make me happyという文字列だったら、文字列は数値では・・・・ない・・・から・・?? エンディアンの概念は登場しない・・・?? 頭が混乱してきました・・・・・><
Chironian

2016/12/30 11:44

そうなりますよ。その責任はソケット側ではなく、ソケットを使う側にあります。 ソケットはペイロードのデータ構造を把握していないのでエンディアン変換したくてもできないからです。 この辺も上記のプログラムでshort型とint型の2つを送受信するようなプログラムをshort型の後ろにパディングを詰めないでint型を配置したバイト列を送受信するプログラムを作ってみるとよく理解できると思います。
strike1217

2016/12/30 11:50

「そうなりますよ。」というのは、えーーと・・・ 「ペイロード部分もエンディアンを共通化しないと、異なるホストバイトオーダーを採用しているCPUでは、データの表示が真逆になってしまうのでは??」 の方のことでしょうか?
Chironian

2016/12/30 11:59

その通りです。 あああ、ごめんなさい。コメントが入れ違いました。 > 例えば、ペイロード部分が、 you will make me happyという文字列だったら、文字列は数値では・・・・ない・・・から・・?? エンディアンの概念は登場しない・・・?? エンディアンはバイト単位で入れ替えますね。char型は1バイトですからエンディアンの概念は存在しません。
strike1217

2016/12/30 12:00

ほえ! やっとわかりました。 お手数をおかけしました。
guest

0

Chironianさん回答でBAと思いますが、

冬休み中にこれ一冊は読破しましょう。

投稿2016/12/30 09:36

ikedas

総合スコア4315

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

strike1217

2016/12/30 09:57

はい! 持っているので、もう一度読んでみます
ikedas

2016/12/30 10:43

持ってるのか…。 なら、読めば、エンディアンが関係あるのはネットワークインタフェース層から上の層だとわかるはず!
strike1217

2016/12/30 11:08

ふむふむ・・・ 読み直します!! ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問