반응형
패킷 전송 시 CR(Carriage Return)과 LF(Line Feed)를 입력하는 이유
CR(캐리지 리턴, \r, ASCII 값 13)과 LF(라인 피드, \n, ASCII 값 10)는 텍스트 기반 프로토콜에서 메시지의 끝을 나타내는 표준적인 방법입니다.
📌 사용 이유
- 데이터 구분 (End of Message, EOM)
- 수신 측에서 데이터 패킷이 완전히 전송되었음을 인식하기 위해 사용됨.
- 텍스트 기반 프로토콜(예: HTTP, Telnet, SMTP, FTP 등)에서도 명령 종료 표시로 많이 사용됨.
- 가독성 및 개행 처리
- 일부 시스템(특히 Windows)에서는 CRLF(\r\n) 조합을 줄 바꿈 문자로 사용.
- UNIX/Linux 계열은 LF(\n)만 사용하지만, 네트워크 프로토콜에서는 CRLF가 표준.
- 시리얼 통신 및 네트워크 프로토콜 호환성
- 시리얼 통신, TCP/IP 프로토콜, 모드버스(Modbus) 등에서도 메시지 경계를 구분하는 데 활용됨.
📌 CR과 LF의 ASCII 코드 값
문자 설명 ASCII 코드 16진수
| CR | Carriage Return (캐리지 리턴) | 13 | 0x0D |
| LF | Line Feed (라인 피드) | 10 | 0x0A |
📌 예제
🔹 CRLF가 포함된 전송 데이터 예시
byte[] btCR = { 13 }; // CR (0x0D)
byte[] btLF = { 10 }; // LF (0x0A)
Array.Copy(btCR, 0, btData, nIndex, btCR.Length);
Array.Copy(btLF, 0, btData, nIndex + btCR.Length, btLF.Length);
💡 이렇게 하면, 송신된 데이터의 끝을 \r\n으로 명확히 구분할 수 있음.
📌 주요 네트워크 프로토콜에서 CRLF 사용 예시
- HTTP 요청 헤더 종료
- HTTP 프로토콜에서 헤더의 끝을 CRLF CRLF (\r\n\r\n)로 표시.
- GET /index.html HTTP/1.1\r\n Host: example.com\r\n Connection: keep-alive\r\n \r\n
- SMTP (메일 전송 프로토콜)
- SMTP 명령어는 CRLF로 끝남.
- HELO example.com\r\n MAIL FROM:<sender@example.com>\r\n
- Telnet 및 시리얼 통신
- 사용자가 입력한 명령어의 끝을 \r\n으로 보내야 함.
📌 결론
✅ CR/LF는 네트워크 패킷에서 메시지 경계를 표시하는 표준적인 방식
✅ 다양한 프로토콜에서 사용되며, 수신 측에서 데이터의 끝을 정확히 인식할 수 있도록 도와줌
✅ TCP/IP 기반 통신, 시리얼 통신, HTTP, SMTP 등에서 필수적인 역할을 함
🚀 즉, 이 코드에서 CRLF(\r\n)를 추가하는 것은 데이터 패킷의 종료를 명확히 알리기 위한 목적!
반응형