はじめに
私の結論は"変わる"です, 正しくはデータ転送によってデータ内容は変化することがあります. "ファイル転送サービスで音質が変わるか"という問いならば, 変わらないです, そんな品質のサービスなら誰も使わないでしょう. 私は馬鹿なので読むなら話半分で.
この問題に対して, TCPについてだけ調べてみました.
余談
ファイルフォーマットには, データ破壊検出機能があります, データ伝送でデータ破壊が起きた場合に検出できる可能性が上がります. 今回の問いとは何も関係がないので無視します.
- wav, mp3, mp4, 挙げられているフォーマットにそのような機能はない(調べてないですけど)
- Zip, 7zはCRC32でデータ破壊検出が可能
TCPのエラー検出
TCPのエラー検出は, ヘッダに付与された16bitのチェックサムで行います. このチェックサムが異なればパケットの再送・破棄を行います. データ破壊が起きていてもチェックサムが同じであれば正常に通信が完了します.
(CRCの衝突についての論文があるのですが失念), TCPのチェックサムはCRC16よりも弱く簡単に衝突します.
研究や経験則について, 軽く調べただけでも次のような情報があります.
詳細は書けませんが, ある店舗とサーバの通信だけ再送やデータ破壊が起きるという知見もあります.
データではありませんが, Bitsquatting という攻撃手法も考えられます.
まとめ
エンジニアを名乗らないのならば, どうでもいいと思います, 私もうまく付き合います.
SSL/TLSが必須になった今日では, フロントエンドエンジニアやバックエンドエンジニアの方々が気にするところではないですが, エンジニアを名乗るなら知っておいてもいいのではないでしょうか. TCPだけでは, データは壊れている可能性があるし, 意図していない宛先に届いていると思って実装するといいと思います.
ファイルのバイトの単位の一致を確認するために, ハッシュを使うのはエンジニアとしておかしくないですか?, ハッシュ値を計算するために全バイトをパースしているのはむだなので. 速さも正しさもバイト単位の比較をした方が良いのでは.