1. 흐름제어.
1.1. HW flow control(Serial port)
Serial port(HW)에서 지원하는 방법으로, HW상의 serial buffer의 상태에 따라서 전송을 계속할지 멈출지 결정한다. 이 방법은 보통 HW의 지원으로 이루어지며, SW는 해당 장치를 enable하기만 하면 된다.
1.2. SW flow control
선로상에서 서로간의 buffer상태에 따라서 data를 전송하거나 멈추기 위해서 특별한 data를 전송하는 방법이다. 추가의 HW가 불필요하지만, 송/수신 SW에서 적절한 반응을 해야만 한다.
수신단에서는 저장되는 데이타의 양이 버퍼의 용량에 도달하면 (경우에 따라서는 도달 전에) 전송단에 XOFF를 보내고, 이후 데이터 처리가 끝나고 buffer라 준비가 된 경우, XON을 보냄으로써 전송을 재개한다.
2. Protocol의 종류.
Flow control은 단순히 속도를 맞추는 기능을 수행할 뿐, 본격적인 전송 프로토콜이라고 하기에는 부족하다. 그래서 필요에 따라 새로운 전송프로토콜들이 개발되었다.
2.1. XModem
가장 보편화된 프로토콜로 아래 포멧에 따라 128 bytes를 포함한 packet을 보내고 수신측의 응답을 받으면 다른 packet을 보내는 방식으로 구현되어 있다.
XON/OFF 대비 handshaking overhead가 적기 때문에 좀 더 효율적이지만, response를 기다려야 한다는 점에서는 패킷교환망에서는 효율이 떨어진다.
초기 버전의 경우, 1byte의 checksum을 통해서 에러 검출을 했지만, 이후에 CRC (XModem/crc)로 대체되었다.
이후 packet size를 더 키워서 효율을 높인 버전(XModem-1K)과 response를 기다리지 않고 다음 packet을 전송하는 버전(XModem-G)이 개발되었다.
XModem-G의 경우 뒤늦게 전송실패 response를 받는 경우, 재전송이 없이 전송을 중단하기 때문에 선로가 좋지않은 경우 권장되지 않는다.
2.2 YModem
YModem은 XModem을 발전시켜 효율을 높인 프로토콜로 packet size의 조절이 가능하며, 파일이름 등과 같은 부가 정보까지 전송이 가능하고, 여러 파일을 한번에 전송하는 batch기능까지 추가 되었다.
Ymodem에서 개선된 버전이 있는데, Xmodem-G와 비슷하게 수신측의 응답을 기다리지 않고 다음 블럭을 전송한다.
2.3 ZModem
앞서 나온 프로토콜들의 단점을 보완하는 가장 빠르고 안정된 프로토콜이다.
Ymodem을 이어받아서 파일의 이름과 크기를 처음에 전송하며, CRC도 32비트로 강화되었다.
프레임의 크기를 전송선로의 상태에 따라 실시간으로 변화시킬 수 있다는 점도 장점이다. 예를 들어 최초 1KB packet 전송결과 실패했다면 즉시 다음 packet은 512 bytes packet으로 바꾸어 전송할 수 있다.
Ymodem에서 아쉬웠던 재전송 기능도 추가되었다. 전송중에 에러가 발생하여 전송이 중단되었을 경우 후에 다시 같은 파일을 전송하게되면 스스로 에러가 난 부분 다음부터 전송을 한다는 점이다. 여기에 와일드카드 지원, 파일압축기능, 파일암호화기능과 같은 많은 기능 지원으로 현재는 전 세계에서 가장 많이 사용하고 있는 프로토콜의 표준이 되었다.